【问题标题】:using 3rd party library (libconfig) with Qt (C++)将 3rd 方库 (libconfig) 与 Qt (C++) 一起使用
【发布时间】: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 前缀。换句话说,Unixy libconfig++.so 文件在 Windows 上通常是 config++.dll。

标签: c++ c qt name-mangling libconfig


【解决方案1】:

如果您的库名为“libconfig++.lib”,您可能需要更改

LIBS += -L$$PWD/libconfig/lib -lconfig++ 

到

LIBS += -L$$PWD/libconfig/lib -llibconfig++ 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    相关资源
    最近更新 更多