簡體   English   中英

使用g ++鏈接到C ++ dll的C ++庫

[英]C++ library linking to C++ dll using g++

我已經看到很多人使用C庫鏈接到C ++或C ++庫鏈接到C的人的問題和答案。但是,我有一個C ++庫鏈接到C ++,並且得到與人們將C和C ++混合在一起的相同症狀(鏈接期間未定義的參考)。

這是我的g ++行:

g++ -L C:/MyLibraries mycode.cpp -shared -o mycode.dll -lopengl32 -lglu32 -lgdi32 -lMyLibrary

到目前為止,我遇到的每個答案都在談論以下內容來包裝我的標題:

#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif

但是,我的庫是純C ++,100%類,沒有全局函數,外部“ C”不能滲透任何東西(不能在類中的方法上外部“ C”,並用extern“”包裹整個類集) C”不執行任何操作...鏈接時仍未定義引用)。

MyLibrary.lib是用Visual Studio 2010編寫的。而且,我已經使用Visual Studio 2005和2008編寫了許多庫。在其中的任何一個中都沒有添加外部“ C”以將它們靜態鏈接到其他基於Visual Studio的項目。 C ++庫可以毫無問題地鏈接到其他C ++項目。

這是Visual Studio不會處理的g ++嗎? 我可以將大量自己的C ++自定義靜態庫靜態鏈接到其他C ++項目中,並且可以正常工作。 Visual Studio是否足夠聰明,足以破譯它自己的C ++方法名稱,所以到目前為止,我從來沒有遇到過這種情況? 但是g ++不知道該怎么做,強制要求使用C命名約定(即使我兩端都是100%的C ++)?

或者是即使我正在使用g ++,它仍然強制執行一些標准C規則的問題? 我的g ++命令行出了點問題?

即使在MSDN上尋找導出dll函數的答案,它看起來也似乎更像是我的g ++行出現了問題,因為它們的鏈接包含諸如“將C函數導出到C ++可執行文件”和“將C ++函數導出到C中”的主題。可執行文件”,沒有指向任何地方提到的“將C ++函數導出到C ++可執行文件”的鏈接...我在函數上嘗試了__declspec(dllexport),該函數已編譯,但仍與g ++保持未定義的鏈接。 有任何想法嗎?

謝謝。

Visual Studio和g ++對名稱修改,vtable布局等使用非常不同的約定,因此將與它們一起構建的庫鏈接在一起不是安全的(除非它們僅通過C接口進行通信)。 有關詳細信息, 請訪問 MinGW網站上的http://www.mingw.org/wiki/MixingCompilers

暫無
暫無

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

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