2

当我阅读共享库时,这些疑问开始出现在我身上。

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 中,因为每个人都必须搜索这个文件夹,这将与他们完全相关。

4

1 回答 1

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
于 2013-04-07T19:03:26.520 回答