如何在其他linux pc上运行自编译二进制文件

时间:2014-01-28 13:48:54

标签: linux gcc makefile centos

我在一个问题上遇到麻烦,我想编译一个项目,当我完成时,它在PC(centos 6.4)上工作得很好,我编译它,但是当我将二进制文件复制到另一台PC时( centos 6.4)并尝试运行它,有关于依赖的错误:

错误讯息: ./nano:加载共享库时出错:libcurl.so.4:无法打开共享对象文件:没有这样的文件或目录

然后我试着找出丢失了多少依赖:

[root@localhost ~]# ldd nano
        libcurl.so.4 => not found
    libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003959e00000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003959200000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003958e00000)
[root@localhost ~]#

然后,我再次尝试其他电脑(红帽):

[root@localhost ~]# ldd nano
/usr/bin/checkdisk: /usr/lib64/libidn.so.11: no version information available (required by /usr/lib64/libcurl.so.4)
/usr/bin/checkdisk: /lib64/libc.so.6: version GLIBC_2.7 not found (required by /usr/lib64/libcurl.so.4)
/usr/bin/checkdisk: /lib64/libc.so.6: version GLIBC_2.11 not found (required by /usr/lib64/libcurl.so.4)
/usr/bin/checkdisk: /usr/lib64/libnss3.so: version NSS_3.12.5 not found (required by /usr/lib64/libcurl.so.4)
/usr/bin/checkdisk: /lib64/libc.so.6: version GLIBC_2.12 not found (required by /lib64/libldap-2.4.so.2)
/usr/bin/checkdisk: /usr/lib64/libnss3.so: version NSS_3.12.9 not found (required by /lib64/libldap-2.4.so.2)
/usr/bin/checkdisk: /usr/lib64/libnss3.so: version NSS_3.12.5 not found (required by /lib64/libldap-2.4.so.2)
/usr/bin/checkdisk: /lib64/libc.so.6: version GLIBC_2.7 not found (required by /usr/lib64/libcrypto.so.10)
[root@localhost ~]#

所以,任何人都可以帮助我如何使其在其他centos / redhat上运行良好?非常感谢。

1 个答案:

答案 0 :(得分:1)

这是一个非常难的问题。这不是大多数GNU / Linux发行版中的事情。这个论点的双方都有充分的理由; Google可以帮助您了解它。

可能做你想做的事,称为静态链接。难度取决于您使用的库类型。不幸的是,curl处于“非常困难”的一面,因为卷曲本身依赖于许多其他库;尝试在其工作的系统ldd上运行libcurl.so.4并查看它需要多少内容...将程序与curl完全静态链接,您还必须静态链接所有其他库......并按正确的顺序!这并不简单,并且没有很好的工具可以让使变得简单,因为这不是首选的做事方式。

因此,到目前为止,最简单的解决方案是使用您的包管理器在目标系统上安装这些库。如果您自己构建一个包,则可以在包中定义它需要其他包(如curl),然后包管理器将确保它们已安装。