我正在尝试制作可分发的Linux Qt应用程序。它将在机器上构建运行和安装,我已经在另一台机器上(没有Qt)构建它,它是完全相同的版本,而不是其他机器。
我目前正在使用Ubuntu 16,但是在15和14它将会出现段错误(在libc.so.6的某个地方)。
我使用QtCreator创建QtQuick Controls 2应用程序。它将自动生成带有两个可单击按钮的样本。这是我的考验。
据我所知,没有linuxdeployqt(不幸的是)。
所以我自己复制所有Qt依赖项,包括所需的所有QML和.so文件。我创建了一个qt.conf文件来描述我放置所有东西的路径。
这个在没有QT安装的另一台Ubuntu 16机器上工作的事实必然意味着我需要在正确的位置正确配置我需要的所有东西。
这是一个动态构建的应用程序,而不是静态链接。
我怀疑问题是(以某种方式)与.so文件的不兼容版本。为此,我在无法工作的机器上跟踪.so文件的加载(例如Ubuntu 15)。
这里是跟踪,使用
export LA_LIBRARY_PATH=$dirname/helloworldlib:$dirname/helloworldlib/lib
LD_TRACE_LOADED_OBJECTS=1 $dirname/helloworldlib/helloworld "$@"
(没有LD_TRACE_LOADED_OBJECTS = 1是正常运行方式,因此LD_LIBRARY_PATH设置为查找本地.so文件)。
linux-vdso.so.1 => (0x00007ffdcebe5000)
libQt5Gui.so.5 => /usr/local/bin/./helloworldlib/lib/libQt5Gui.so.5 (0x00007f7dab418000)
libQt5Qml.so.5 => /usr/local/bin/./helloworldlib/lib/libQt5Qml.so.5 (0x00007f7daae1f000)
libQt5Core.so.5 => /usr/local/bin/./helloworldlib/lib/libQt5Core.so.5 (0x00007f7daa704000)
libstdc++.so.6 => /usr/local/bin/./helloworldlib/lib/libstdc++.so.6 (0x00007f7daa382000)
libgcc_s.so.1 => /usr/local/bin/./helloworldlib/lib/libgcc_s.so.1 (0x00007f7daa16c000)
libc.so.6 => /usr/local/bin/./helloworldlib/lib/libc.so.6 (0x00007f7da9da3000)
libpthread.so.0 => /usr/local/bin/./helloworldlib/lib/libpthread.so.0 (0x00007f7da9b86000)
libz.so.1 => /usr/local/bin/./helloworldlib/lib/libz.so.1 (0x00007f7da996c000)
libGL.so.1 => /usr/local/bin/./helloworldlib/lib/libGL.so.1 (0x00007f7da96fb000)
libm.so.6 => /usr/local/bin/./helloworldlib/lib/libm.so.6 (0x00007f7da93f2000)
libQt5Network.so.5 => /usr/local/bin/./helloworldlib/lib/libQt5Network.so.5 (0x00007f7da9094000)
librt.so.1 => /usr/local/bin/./helloworldlib/lib/librt.so.1 (0x00007f7da8e8c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7dabbc0000)
libicui18n.so.56 => /usr/local/bin/./helloworldlib/lib/libicui18n.so.56 (0x00007f7da89f2000)
libicuuc.so.56 => /usr/local/bin/./helloworldlib/lib/libicuuc.so.56 (0x00007f7da863a000)
libicudata.so.56 => /usr/local/bin/./helloworldlib/lib/libicudata.so.56 (0x00007f7da6c57000)
libdl.so.2 => /usr/local/bin/./helloworldlib/lib/libdl.so.2 (0x00007f7da6a53000)
libgthread-2.0.so.0 => /usr/local/bin/./helloworldlib/lib/libgthread-2.0.so.0 (0x00007f7da6851000)
libglib-2.0.so.0 => /usr/local/bin/./helloworldlib/lib/libglib-2.0.so.0 (0x00007f7da6540000)
libexpat.so.1 => /usr/local/bin/./helloworldlib/lib/libexpat.so.1 (0x00007f7da6317000)
libxcb-dri3.so.0 => /usr/local/bin/./helloworldlib/lib/libxcb-dri3.so.0 (0x00007f7da6114000)
libxcb-present.so.0 => /usr/local/bin/./helloworldlib/lib/libxcb-present.so.0 (0x00007f7da5f11000)
libxcb-sync.so.1 => /usr/local/bin/./helloworldlib/lib/libxcb-sync.so.1 (0x00007f7da5d0a000)
libxshmfence.so.1 => /usr/local/bin/./helloworldlib/lib/libxshmfence.so.1 (0x00007f7da5b07000)
libglapi.so.0 => /usr/local/bin/./helloworldlib/lib/libglapi.so.0 (0x00007f7da58d9000)
libXext.so.6 => /usr/local/bin/./helloworldlib/lib/libXext.so.6 (0x00007f7da56c7000)
libXdamage.so.1 => /usr/local/bin/./helloworldlib/lib/libXdamage.so.1 (0x00007f7da54c4000)
libXfixes.so.3 => /usr/local/bin/./helloworldlib/lib/libXfixes.so.3 (0x00007f7da52be000)
libX11-xcb.so.1 => /usr/local/bin/./helloworldlib/lib/libX11-xcb.so.1 (0x00007f7da50bc000)
libX11.so.6 => /usr/local/bin/./helloworldlib/lib/libX11.so.6 (0x00007f7da4d82000)
libxcb-glx.so.0 => /usr/local/bin/./helloworldlib/lib/libxcb-glx.so.0 (0x00007f7da4b69000)
libxcb-dri2.so.0 => /usr/local/bin/./helloworldlib/lib/libxcb-dri2.so.0 (0x00007f7da4964000)
libxcb.so.1 => /usr/local/bin/./helloworldlib/lib/libxcb.so.1 (0x00007f7da4742000)
libXxf86vm.so.1 => /usr/local/bin/./helloworldlib/lib/libXxf86vm.so.1 (0x00007f7da453c000)
libdrm.so.2 => /usr/local/bin/./helloworldlib/lib/libdrm.so.2 (0x00007f7da432d000)
libpcre.so.3 => /usr/local/bin/./helloworldlib/lib/libpcre.so.3 (0x00007f7da40bd000)
libXau.so.6 => /usr/local/bin/./helloworldlib/lib/libXau.so.6 (0x00007f7da3eb9000)
libXdmcp.so.6 => /usr/local/bin/./helloworldlib/lib/libXdmcp.so.6 (0x00007f7da3cb3000)
您可以看到所有.so文件都是从" helloworldlib"中加载的。 。目录
除了装载机: /lib64/ld-linux-x86-64.so.2(0x00007f7dabbc0000)
我知道这是装载机本身。我应该使用自己的.so加载版吗?我对此内幕的了解不够充分。
这与工作机器上的痕迹相同。
关于段错误的信息不多。即使有调试,我也只能确定它在libc.so.6中的某个地方
任何有动态linux qt应用程序工作的人都会提出任何建议,非常感兴趣。
感谢。