编译时指定--rpath
和--dynamic-linker
,运行时指定LIB_LIBRARY_PATH
。
gcc main.c -o main -Wl,--rpath=/path/to/new/glibc/lib -Wl,--dynamic-linker=/path/to/new/glibc/ld-linux-xxxx.so.2
ld-linux-xxxx.so.2
的路径会硬编码到程序中。正是这个原因,导致很多已有程序不能使用新glibc的库。
另外,查看链接问题的两个常用工具是:
- ldd: 查看可执行文件或动态库依赖的其它的库
- strings: 查看库中的字符串,比如
strings /lib64/libc.so.2 | grep GLIBC
可以查看GLIBC支持的版本。