1 .------------------------------------------- 假设我已编译如下,
test : main.o libtest.so.2
gcc main.o -L ../../lib -ltest -o test
libtest.so.2 : version2.c
gcc -Wall -fPIC -c version2.c
gcc -shared -Wl,-soname,libtest.so -o libtest.so.2.0 version2.o
ln -sf libtest.so.2.0 libtest.so
mv libtest.s* ../../lib
main.o : main.c
gcc -c main.c
给出了-ltest,库应该始终是libtest.so的软链接。正确吗? 那么如果我为另一个二进制文件寻找更高版本的libtest并且前者需要旧版本呢?我该如何处理。
2 .--------------------------------------------- ---------------------------- 我有几个库,我不希望将它们包含在LD_LIBRRAY_PATH中,因为每个人都必须搜索这个与他们完全相关的文件夹。
答案 0 :(得分:0)
1.您必须使用-soname:
设置版本gcc -shared -Wl,-soname,libtest.so.2 -o libtest.so.2.0 version2.o
然后链接器会将前者与“libtest.so.2”绑定,而不是libtest.so的“任何版本”。
2.仅在启动应用程序时设置LD_LIBRARY_PATH,您可以创建shell脚本:
LD_LIBRARY_PATH=/path/to/your/libs ./my_app