无法在另一个Linux系统上运行可执行二进制文件?

时间:2010-05-25 02:24:27

标签: c++ qt qt4 cross-platform qt-creator

我正在使用Ubuntu 10.04和Qt4.6,并且我已经通过QtCreator在我自己的计算机上创建了一个可执行的二进制文件。

现在我想将我的可执行文件放在CentOS 5上,但似乎这个可执行文件无法在CentOS上运行。

错误消息是

bash: ./[filename]: cannot execute binary file

现在我知道这来自32位和64位问题,并且成功创建了32位可执行文件。

但是,由于动态链接问题,这个可执行文件仍无法在CentOS上运行,它总是显示:

Error while loading shared libraries: libQtGUI.so.4: cannot open shared object file: No such file or directory

我尝试在.pro文件

上添加“-static”标志
QMAKE_CFLAGS_RELEASE    += -Os -static
QMAKE_CPPFLAGS_RELEASE  += -Os -static
QMAKE_CXXFLAGS_RELEASE  += -Os -static
QMAKE_CCFLAGS_RELEASE   += -Os -static

然而,看起来它只生成“静态二进制”而不是“静态链接”,依赖性仍然存在。

我还尝试在.pro文件中添加以下行:

QMAKE_LFLAGS += static

但是这个项目在执行此操作后无法编译。 我没有权限在Cent OS上安装Qt,如何使用静态链接编译这个项目,以便可执行文件可以独立运行?

感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

检查64位与32位 - file(1)是你的朋友。然后使用ldd(1)检查缺少哪些库。

编辑:

看看这个问题Qt static linking and deployment

答案 1 :(得分:2)

您的可执行文件无法运行可能有少数原因。但是,首先使用“ldd”检查依赖关系以获得线索。

答案 2 :(得分:2)

一般来说,从一个发行版到另一个发行版运行可执行文件总是一个坏主意。除了架构差异(32对64位)之外,您还可能遇到库不兼容,ABI更改和其他有趣的东西。您可以通过编译静态二进制文件来摆脱库问题,但这带来了其他缺点。

您应该将发行版视为自己的系统,而不管它们是否都基于Linux内核,并为每个要支持的人编译二进制文件。如果您的目标是提供二进制包,OpenSUSE Build Factory可以为您提供帮助。