Linux 使用RPATH指向libc库

Linux 使用RPATH指向libc库,linux,linker,glibc,libc,Linux,Linker,Glibc,Libc,我需要在一个古老的linux发行版(CentOS 6.5)中部署我的共享库(.so) 问题是我实际上是在使用CentOS 7(gcc 4.8.2)编译代码,而libc版本则不同 我的代码依赖于GLIBC 2.14,然而,CentOS 6.5的最新GLIBC版本是2.13 我想使用RPATH机制并将libc文件与共享库文件(.so)一起部署 这可能吗 到目前为止我做了什么 我创建了一个目录,其中包含: $ls ld-linux-x86-64.so.2 libc.so.6 libgcc_.so.1

我需要在一个古老的linux发行版(CentOS 6.5)中部署我的共享库(.so)

问题是我实际上是在使用CentOS 7(gcc 4.8.2)编译代码,而libc版本则不同

我的代码依赖于GLIBC 2.14,然而,CentOS 6.5的最新GLIBC版本是2.13

我想使用RPATH机制并将libc文件与共享库文件(.so)一起部署

这可能吗

到目前为止我做了什么 我创建了一个目录,其中包含:

$ls
ld-linux-x86-64.so.2 libc.so.6 libgcc_.so.1 libm.so.6 libstdc++.so.6

-静态libgcc和-静态libstdc++ 这些有助于解决GLIBCXX的问题。 但是,GLIBC版本问题仍然存在:

/lib64/libc.so.6:找不到版本'GLIBC_2.14'(sss_reactions/libsss_reactions.so要求)

--rpath和--动态链接器 使用
readelf
实用程序,我发现RPATH设置正确,在库上调用
ldd
也指向正确的目录(包含较新的libc)

但是,当我尝试使用
dlopen()
加载库时,我得到了相同的错误:

/lib64/libc.so.6:找不到版本'GLIBC_2.14'(sss_reactions/libsss_reactions.so要求)

设置LD_库路径 在这种情况下,我得到以下错误:

$LD\u LIBRARY\u PATH=../dist//Dlopen
./Dlopen:relocation error:../dist/libc.so.6:symbol\u dl\u启动,文件ld-linux-x86-64.so.2中未定义GLIBC\u PRIVATE版本,带有链接时间参考

我想使用RPATH机制并将libc文件与共享库文件(.so)一起部署

这可能吗

不,不是,原因已经解释了

另请参阅答案,了解在单个主机上共存多个
libc.so.6
实例所涉及的内容