使用RPATH指向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_s.so.1 libm.so.6 libstdc++.so.6

-static-libgcc和-static-libstdc ++

这些帮助解决了GLIBCXX的问题。 但是,GLIBC版本问题仍然存在:

/lib64/libc.so.6: version `GLIBC_2.14' not found (required by sss_reactions/libsss_reactions.so)

--rpath和--dynamic-linker

使用readelf实用程序,我看到RPATH已正确设置,并且在库上调用ldd也指向正确的目录(包含较新的libc)。

但是,当我尝试使用dlopen()加载库时,出现同样的错误:

/lib64/libc.so.6: version `GLIBC_2.14' not found (required by sss_reactions/libsss_reactions.so)

设置LD_LIBRARY_PATH

在这种情况下,我得到这个错误:

$ LD_LIBRARY_PATH=../dist/ ./Dlopen ./Dlopen: relocation error: ../dist/libc.so.6: symbol _dl_starting_up, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference


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

这甚至有可能吗?

不,这不是,这里解释的原因。

另请参阅此答案,了解在单个主机上共存多个libc.so.6实例的过程。

链接地址: http://www.djcxy.com/p/46447.html

上一篇: Use RPATH to point to libc library

下一篇: Sharing executable memory pages in Linux?