簡體   English   中英

在GCC中將C ++鏈接到C

[英]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”的作用是什么?

g ++和gcc有什么區別?

查找名稱錯誤。 如果C ++庫不導出“extern C”名稱,則它會以三種不同的方式之一變得有趣,具體取決於使用哪個編譯器來構建庫。

即使這樣,你也不會得到滿意的結果,因為很多C ++概念將無法通過在圍欄C側啟動的程序正確處理。 當你不理解這種“外來”語言的保證時,你不認為C程序實際上會做任何間接調用的C ++靜態塊,對嗎?

故事的簡短版本。 即使您使用C編程,如果要正確處理C ++庫,也需要使用C ++編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM