c++ - 我可以在忽略 Qt 的打包库的同时编译 Qt 应用程序吗?

标签 c++ qt linker

我正在尝试在 Antergos Arch Linux 中编译 Qt 应用程序,该应用程序使用了 icu 相关的库。当我收到以下链接器错误时,我有点困惑:

/usr/bin/ld: warning: libicuuc.so.60, needed by /usr/lib/libxml2.so.2, may conflict with libicuuc.so.56
/usr/bin/ld: warning: libicudata.so.60, needed by /usr/lib/libicuuc.so.60, may conflict with libicudata.so.56

这些之后是对库中函数的几个 undefined reference 。我仔细检查了我系统上所有的 libicu* 版本,但只能找到版本 60;直到我查看我的 Qt 安装目录,在 Qt/5.10.0/gcc_64/lib 下,我才意识到 Qt 提供了版本 56 的库文件。

我对链接器相关的问题不是那么热衷。是否可以让编译器忽略 Qt 提供的库,只链接我系统上已有的 60 版库?如果没有,我有哪些解决方法?

最佳答案

是也不是。

理论上 Qt 可以简单地使用 v60 而不是 v56 icu 库,前提是这两个版本是二进制兼容的。

但是,Qt 库特别需要 icu 库的版本 56。您还尝试使用 libxml,它需要 60 版的 icu 库。这意味着您同时需要版本 56 和 60,这是不可能的,因为您最终会遇到符号冲突。

你问题的来源很可能是你使用了Qt公司提供的Qt包。此类软件包适用于大多数 Linux 发行版,但不能 100% 兼容。

解决方案是使用使用相同版本的 icu 库的 Qt 和 libxml 构建。 最简单的解决方案是使用 Linux 发行版提供的 Qt 库。另一种解决方案是从源代码构建 Qt。

关于c++ - 我可以在忽略 Qt 的打包库的同时编译 Qt 应用程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48270402/

相关文章:

c++ - VS2013忽略杂注警告禁用

c++ - 在本地类中定义结构并初始化它

Qt moc.exe无法生成* .moc文件

c++ - 将模板化的 C++ 类拆分为 .hpp/.cpp 文件——这可能吗?

GCC 不同部分中的常量指针

macos - 找不到 Mac X 框架内核

c++ - 这个模式在 C++ 中有效吗?

c++ - 继承二级基类构造函数: silent error

c++ - Qt 5 dds 支持以节省内存并改善渲染

c++ - QProgressBar 卡在 98%