我正在尝试在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
其后是对库中函数的几个未定义引用。我仔细检查了我系统上libicu*
的所有版本,只能找到版本60;直到我查看Qt/5.10.0/gcc_64/lib
下的Qt安装目录,才意识到Qt正在提供版本56库文件。
我对链接器相关问题并不是那么热门。是否有可能让编译器忽略Qt提供的库,并且只链接我系统上已有的60版本库?如果没有,我有哪些解决方法?
答案 0 :(得分:1)
是和否。
理论上,Qt可以简单地使用v60而不是v56 icu库,前提是这两个版本是二进制兼容的。
但是,Qt库特别需要icu库的第56版。此外,您正在尝试使用libxml,它需要icu库的60版本。这意味着你需要同时使用版本56和60,这是不可能的,因为你最终会产生冲突的符号。
您的问题的根源可能是您使用Qt公司提供的Qt包。这些软件包可以与大多数Linux发行版一起使用,但它们不能100%兼容。
解决方案是使用Qt和libxml的构建版本,它们使用相同版本的icu库。 最简单的解决方案是使用Linux发行版提供的Qt库。另一种解决方案是从源代码构建Qt。
答案 1 :(得分:0)