我在一个问题上遇到麻烦,我想编译一个项目,当我完成时,它在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上运行良好?非常感谢。
答案 0 :(得分:1)
这是一个非常难的问题。这不是大多数GNU / Linux发行版中的事情。这个论点的双方都有充分的理由; Google可以帮助您了解它。
可能做你想做的事,称为静态链接。难度取决于您使用的库类型。不幸的是,curl
处于“非常困难”的一面,因为卷曲本身依赖于许多其他库;尝试在其工作的系统ldd
上运行libcurl.so.4
并查看它需要多少内容...将程序与curl完全静态链接,您还必须静态链接所有其他库......并按正确的顺序!这并不简单,并且没有很好的工具可以让使变得简单,因为这不是首选的做事方式。
因此,到目前为止,最简单的解决方案是使用您的包管理器在目标系统上安装这些库。如果您自己构建一个包,则可以在包中定义它需要其他包(如curl
),然后包管理器将确保它们已安装。