【发布时间】:2011-11-01 10:21:17
【问题描述】:
我无法让第三方库 (libconfig++) 在 Qt 中工作。
在 Qt 中编译时,我收到如下错误消息:
undefined reference to `_imp___ZN9libconfig6ConfigC1Ev'
undefined reference to `_imp___ZN9libconfig6Config8readFileEPKc'
undefined reference to `_imp___ZNK9libconfig6Config5writeEP6_iobuf'
等等
在我的 .pro 文件中,我有:
LIBS += -L$$PWD/libconfig/lib -lconfig++
我已将 libconfig++.dll 和 libconfig++.lib 添加到正确的文件夹中。
这个项目成功地使用了另一个 3rd 方库(以类似的方式),所以我认为这不是语法或包含问题。
这似乎是 C++ 名称修改问题?我该如何确认?
现在,我在 VS 2008 中构建了该库(我尝试将其构建为动态库和静态库,均无效)。我想我过去可以用其他图书馆做到这一点。 VS中是否有一些我没有正确设置的标志?
谢谢
【问题讨论】:
-
您是否确认该库及其路径在构建输出中正确显示?
-
是的,路径显示正确。我的所有内容都与我包含其他 3rd 方库的方式相同,如果我在代码中删除了对 libconfig 的引用,则代码可以正常工作。我强烈怀疑名称修改,但我不知道如何确认这是问题(或如何解决)
-
配置属性->C/C++->高级->编译为设置为编译为 C++ 代码 (/TP)? libconfig 设置为依赖项(Project->Project Dependencies...)?
-
您如何编译使用该库的应用程序?名称 mangling 方案表明您正在使用 MinGW/gcc Qt 库进行编译,并且您不能将使用 VC++ 编译的 C++ 库与它混合使用(C 库可以)。
-
您确定.dll 名称不应该是
config++.dll吗?请注意类 Unix 和 Windows 之间的不同库命名约定。在类 Unix 上,库 .so 文件以lib前缀开头,-l链接器选项中不包含该前缀。在 Windows 上,.dll 文件没有隐式的lib前缀。换句话说,Unixylibconfig++.so文件在 Windows 上通常是config++.dll。
标签: c++ c qt name-mangling libconfig