编译时指定--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支持的版本。