【问题标题】:how to make a self compile binaries running at other linux pc如何使在其他 linux pc 上运行的自编译二进制文件
【发布时间】:2014-01-29 01:54:51
【问题描述】:

我遇到了一个问题,我想编译一个项目,当我完成后,它在我编译它的 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 ~]#

然后,我再次尝试另一台电脑(redhat):

[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 上运行良好?非常感谢。

【问题讨论】:

  • 你需要在远程计算机上安装libcurl.so.4 可能是由一些curl 包提供的。您可能想要打包您的应用程序(作为 CentOS 的 .rpm 包)。
  • 非常感谢。但我只想将我的应用程序构建成一个可执行文件,而不是 rpm,就像 microsoft visual studio MD/MT 编译模式的区别一样,有什么建议吗?谢谢

标签: linux gcc makefile centos


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多