基于柯南的Qt安装使用错误的主目录进行链接

时间:2019-07-18 13:07:50

标签: qt conan

我正在尝试使用通过柯南/ Artifactory安装的Qt 5.13.0构建我们的应用程序。我们运行自己的Artifactory服务器,并且Qt版本在CI解决方案中具有自建功能(并静态链接)。我们使用经过Conan recipe for Qt written by the bincrafters修改的{{3}}来为已知的Qt错误应用一些补丁,并设置一些标志以便在Android和WebAssembly上正确构建。

在尝试构建应用程序时,链接器无法为Qt本身找到必要的依赖关系,因为它试图在构建Qt程序包的用户而不是正在运行构建程序的用户的主文件夹中查找它们。 / p>

以下是构建日志的摘录,显示了将所有先前编译的目标文件链接在一起的尝试:

       application folder-------v        subproject of the application----v-------v       dependency of the application, correct user home dir---------v                                             Qt library installed via Conan, correct user home dir-------v                                                            dependency of Qt, WRONG user home dir------------v
g++ -Wl,--gc-sections -o ../../fah [--> all the .o files <--] -L../lib -lmodel -lcore [--> more linked libraries and application parts <--] -L/home/kaupes/.conan/data/libsodium/1.0.18/bje/stable/package/d1efe3774eed76670888f919621e7c4e1b52efa9/lib  /home/kaupes/.conan/data/qt/5.13.0/bje/stable/package/d6b3f512e1a5607061462f94e3271dc8af3dd516/lib/libQt5Gui.a /home/dev/.conan/data/harfbuzz/2.4.0/bje/stable/package/c68551ae35bf5d62e66263379d58a38416eb84a9/lib/libharfbuzz.a [--> many, many more libraries <--]
g++: error: /home/dev/.conan/data/harfbuzz/2.4.0/bje/stable/package/c68551ae35bf5d62e66263379d58a38416eb84a9/lib/libharfbuzz.a: No such file or directory
many, many more errors...

如您所见,运行构建的用户是kaupes,但是g++调用尝试在/home/dev/(构建CI用户的主文件夹)中查找依赖项。 Qt Conan软件包。

只有Qt本身的依赖项才有问题。在正确的位置可以找到应用程序的依赖项(也通过柯南安装)。

已使用以下柯南调用在CI中构建了Qt软件包:

conan create --profile .conan/profiles/linux -s compiler=gcc -s compiler.version=9 . fah/stable

显式设置了编译器和版本,因为我也为另一个GCC版本构建。 linux配置文件也没有做任何有趣的事情(据我所知):

include(default)

[settings]
build_type=Release
compiler.libcxx=libstdc++11

[options]
OpenSSL:shared=False
OpenSSL:no_asm=True
OpenSSL:no_asm=True
OpenSSL:no_weak_ssl_ciphers=True
OpenSSL:no_ssl2=True
OpenSSL:no_ssl3=True
OpenSSL:no_engine=True
libcurl:shared=False
libxml2:shared=False
libxml2:fPIC=True
libsodium:shared=False

pcre2:shared=False
libpng:shared=False
freetype:shared=False
bzip2:shared=False
libjpeg:shared=False
harfbuzz:shared=False
xkbcommon:shared=False
qt:shared=False
qt:with_glib=False
qt:with_sqlite3=False
qt:with_mysql=False
qt:with_pq=False
qt:with_odbc=False
qt:with_sdl2=False
qt:with_openal=False
qt:with_libalsa=False
qt:openssl=True
qt:commercial=False
qt:qtsvg=True
qt:qtdeclarative=True
qt:qtactiveqt=False
qt:qtscript=False
qt:qtmultimedia=False
qt:qttools=True
qt:qtxmlpatterns=False
qt:qttranslations=True
qt:qtdoc=False
qt:qtrepotools=False
qt:qtqa=False
qt:qtlocation=True
qt:qtsensors=True
qt:qtwayland=True
qt:qt3d=False
qt:qtimageformats=False
qt:qtgraphicaleffects=True
qt:qtquickcontrols=True
qt:qtserialbus=False
qt:qtserialport=False
qt:qtx11extras=True
qt:qtmacextras=False
qt:qtwinextras=False
qt:qtandroidextras=False
qt:qtwebsockets=True
qt:qtwebchannel=False
qt:qtwebengine=False
qt:qtwebview=False
qt:qtquickcontrols2=True
qt:qtpurchasing=False
qt:qtcharts=True
qt:qtdatavis3d=False
qt:qtvirtualkeyboard=True
qt:qtgamepad=False
qt:qtscxml=False
qt:qtspeech=False
qt:qtnetworkauth=False
qt:qtremoteobjects=False
qt:qtwebglplugin=False
qt:qtlottie=False
qt:qtconnectivity=True

在创建或安装Conan软件包期间我是否做错了什么,或者是由其他原因引起的?

1 个答案:

答案 0 :(得分:0)

实际上,在构建qt时,所有依赖关系的路径都被硬编码在配置文件(mkspecs \ modules \ qt_lib _ *。pri)中。 我假设您正在使用qmake构建应用程序,因为您使用的是静态qt,而静态qt与cmake不兼容。您可以尝试做的一件事是,通过在qmake调用中添加参数.parent,将harfbuzz lib的完整路径传递给qmake。