[英]Linking C++ to C in GCC
我在C ++“靜態庫”項目中有一個函數extern "C" int ping(void)
。 現在,我想編寫一個簡單的Hello-World C
程序,它將調用此函數int x = ping();
。
我使用g++ / gcc
但我無法將C
可執行文件與C++
共享庫鏈接。 拜托,怎么能這樣做? 你能提供准確的gcc
命令嗎?
編輯 :
g++ -c -static liba.cpp
ar rcs liba.a liba.o
gcc -o x main.o -L. -la
得到:
./liba.a(liba.o):(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2:ld返回1退出狀態
您可能必須使用g ++作為鏈接器,而不是gcc。 如果ping()
函數使用任何STL或異常,new等,它可能鏈接libstdc++
,當您使用g ++作為鏈接器時,它會自動鏈接。
我在編譯和鏈接混合C / C ++代碼和GCC時有很好的結果,但是你們都需要“extern C”(明確地將函數聲明為C函數)並使用-lstdc ++鏈接C ++庫。
也可以看看:
查找名稱錯誤。 如果C ++庫不導出“extern C”名稱,則它會以三種不同的方式之一變得有趣,具體取決於使用哪個編譯器來構建庫。
即使這樣,你也不會得到滿意的結果,因為很多C ++概念將無法通過在圍欄C側啟動的程序正確處理。 當你不理解這種“外來”語言的保證時,你不認為C程序實際上會做任何間接調用的C ++靜態塊,對嗎?
故事的簡短版本。 即使您使用C編程,如果要正確處理C ++庫,也需要使用C ++編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.