【发布时间】:2019-09-17 19:00:10
【问题描述】:
我正在尝试使用通过 Conan/Artifactory 安装的 Qt 5.13.0 构建我们的应用程序。我们运行我们自己的 Artifactory 服务器,并且 Qt 版本在我们的 CI 解决方案中有自构建(和静态链接)。我们使用Conan recipe for Qt written by the bincrafters,稍作修改以应用一些已知 Qt 错误的补丁,并设置一些标志以便在 Android 和 WebAssembly 上正确构建。
在尝试构建应用程序时,链接器无法为 Qt 本身找到必要的依赖项,因为它试图在构建 Qt 包的用户的主文件夹中查找它们,而不是在运行构建的用户的主文件夹中。
这是构建日志的摘录,显示了将所有先前编译的目标文件链接在一起的尝试:
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/(构建Qt Conan 包的CI 用户的主文件夹)中查找依赖项。
只有 Qt 本身的依赖有问题。在正确的位置找到应用程序的依赖项(也通过柯南安装)。
Qt 包已使用以下 Conan 调用在 CI 中构建:
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 包的过程中我做错了什么还是由其他原因引起的?
【问题讨论】:
-
你从哪里下载了这个 Qt 包?您的描述中没有关于包裹的信息。请附上包装参考。
-
在使用 bincrafters 的 Conan 配方在 CI 中构建 Qt 之后,我们从我们自己的 Artifactory 服务器下载此文件。我在开篇文章的第一段添加了一个链接。如果重要的话,构建环境是一个运行 Fedora 30 并安装了必要软件包的 Docker 容器。我们选择的选项需要的所有 Qt 依赖项也在 CI 中构建。