【发布时间】:2013-09-10 11:59:07
【问题描述】:
我正在使用 Qt 开发跨平台应用程序,该应用程序不得依赖于操作系统预安装的库。我对 Windows 没有任何问题:我需要做的就是将 .dll 文件复制到可执行文件目录中。对于各种基于 linux 的系统,我正在使用执行以下步骤的脚本:
- 运行
qmake - 将
-Wl,-rpath,./附加到Makefile的LFLAGS指令,使依赖搜索也在当前目录中运行 - 运行 make
- 使用
ldd -v -r获取所有应用程序依赖项并将可执行文件及其依赖项复制到另一个文件夹中
运行应用程序在构建应用程序的同一操作系统(和同一版本)的全新安装(不带 Qt)上运行良好,但由于某些错误,在另一个操作系统/另一个版本上运行它失败。
没有依赖的构建不是一个可行的选择,因为该应用程序可能在没有互联网访问和/或预安装 Qt 的机器上使用。 而且我也不能使用静态构建,因为需要 QWebKit 并且它不支持静态构建。
我构建应用程序的系统和我尝试运行它的系统的不同组合会产生不同的错误:
relocation error: ./libcrypto.so.7: symbol __libc_enable_secure, version GLIBC_2.0 not defined in file ld-linux.so.2 with link time reference
relocation error: ./libc.so.6: symbol __libc_enable_secure, version GLIBC_PRIVATE not defined in file ld-linux.so.2 with link time reference
有什么想法吗?
【问题讨论】:
-
您可能尝试在比您尝试运行的新版本的 Linux/glibc/binutils 上进行编译。它从来没有真正运作良好。使其工作的最简单方法是安装旧的 Linux 版本(想想 2005 年)并在其上进行编译。顺便说一下,这个问题与 qt 或 g++ 或静态链接无关。这纯粹是一个 glibc/binutils 问题。
-
碰巧是 ALT Linux 吗? :)
标签: linux qt g++ static-linking