Dig*_*ohn 2 c c++ dll g++ static-linking
我已经看到了C库链接到C++的人或者链接到C的C++库的许多问题和答案...但是我有一个链接到C++的C++库,并且与人们将C和C++混合在一起时会遇到相同的症状(链接期间未定义的引用).
这是我的g ++系列:
g++ -L C:/MyLibraries mycode.cpp -shared -o mycode.dll -lopengl32 -lglu32 -lgdi32 -lMyLibrary
Run Code Online (Sandbox Code Playgroud)
到目前为止,我遇到的每个答案都谈到了以下包装我的标题:
#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)
但是,我的库是纯C++,100%类,没有全局函数,没有外部"C"可以写入(不能在类中的方法上使用"C",并且用extern包装整个类集合) C"什么都不做......链接时仍然是未定义的引用".
MyLibrary.lib是在Visual Studio 2010中编写的.而且,我使用Visual Studio 2005和2008编写了许多库.没有一个人需要将extern"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的更多信息.