QT5引用库出错即解决

QT5引用库出错即解决

先看错误:
/usr/bin/ld: warning: libicui18n.so.56, needed by //opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libicuuc.so.56, needed by //opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libicudata.so.56, needed by //opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5, not found (try using -rpath or -rpath-link)
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘u_strToLower_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucnv_getStandardName_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucnv_getAlias_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘uenum_next_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘u_strToUpper_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucnv_setSubstChars_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucal_getTimeZoneDisplayName_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucnv_fromUnicode_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘u_errorName_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘uenum_close_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucal_getDSTSavings_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucal_openTimeZoneIDEnumeration_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucal_setMillis_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucol_close_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucol_getSortKey_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucal_get_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucol_open_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucnv_compareNames_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucal_clone_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucal_open_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucol_setAttribute_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucal_openCountryTimeZones_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucnv_open_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucal_openTimeZones_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucnv_countAliases_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucal_inDaylightTime_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucal_close_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucnv_getAvailableName_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucnv_getDefaultName_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucal_getDefaultTimeZone_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucnv_toUnicode_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucol_strcoll_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucnv_close_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucnv_getMaxCharSize_56’未定义的引用
//opt/Qt5.10.0/5.10.0/gcc_64/lib/libQt5Core.so.5:对‘ucnv_countAvailable_56’未定义的引用

发现

根据错误提示,libQt5Core.so.5找不到libicui18n.so.56等动态库。为什么会找不到呢?我用lld命令看了libQt5Core.so.5:

jie@mao:/opt/Qt5.10.0/5.10.0/gcc_64/lib$ ldd libQt5Core.so.5
    linux-vdso.so.1 =>  (0x00007ffc1efaa000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fab9827e000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fab98064000)
    libicui18n.so.56 => /opt/Qt5.10.0/5.10.0/gcc_64/lib/./libicui18n.so.56 (0x00007fab97bcb000)
    libicuuc.so.56 => /opt/Qt5.10.0/5.10.0/gcc_64/lib/./libicuuc.so.56 (0x00007fab97813000)
    libicudata.so.56 => /opt/Qt5.10.0/5.10.0/gcc_64/lib/./libicudata.so.56 (0x00007fab95e30000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fab95c2c000)
    libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007fab95a2a000)
    libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fab95719000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fab95397000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fab9508e000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fab94e78000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fab94aae000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fab98be9000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fab9483e000)

发现:

libicui18n.so.56 => /opt/Qt5.10.0/5.10.0/gcc_64/lib/./libicui18n.so.56 (0x00007fab97bcb000)
libicuuc.so.56 => /opt/Qt5.10.0/5.10.0/gcc_64/lib/./libicuuc.so.56 (0x00007fab97813000)
libicudata.so.56 => /opt/Qt5.10.0/5.10.0/gcc_64/lib/./libicudata.so.56 (0x00007fab95e30000)

其中/opt/Qt5.10.0/5.10.0/gcc_64/lib/./libicui18n.so.56多了个点。

分析

由于libicui18n.so.56等动态库路径多了个点,导致libQt5Core.so.5找不到它们,所以导致了错误。由于Qt5我是正常安装的,动态库之间理应正确的连在一起,产生这个错误的原因,我猜是QT自己的问题。

解决

既然找不到libicui18n.so.56等动态库,那我们可以显式的添加其库路径到编译器,如果是使用g++命令,直接把包含libicui18n.so.56等动态库的路径添加到-l后,如果是使用CMake编译程序,可以在CMakeLists.txt中添加一句:

link_directories("/opt/Qt5.10.0/5.10.0/gcc_64/lib")
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值