【发布时间】:2016-02-29 15:07:24
【问题描述】:
我正在玩共享库链接和加载过程,并尝试了解解决加载错误的不同方法:
error while loading shared libraries: ... : cannot open shared object file: No such file or directory
我设法通过使用 LD_LIBRARY_PATH 和使用 rpath 来解决它。我现在尝试理解 ldconfig 的用法以及它如何解决它[我的一些网络资源:1、2、3]
所以,我有以下源文件:test.c func1.c func2.c。这是我的工作:
- 将它们编译成 PIC .obj 文件:
$ gcc -Wall -fPIC -c *.c
- 从目标文件创建一个共享库,将其命名为“libshared.so”,并使用“soname”:
$ gcc -shared -Wl,-soname,libshared.so -o libshared.so *.o
- 通过告诉 GCC 在哪里可以找到共享库来链接共享库(
...只是我个人共享库路径的缩写):
$ gcc -L/home/.../my_shared_library -Wall -o mytest test.c -lshared
- 现在,我尝试运行它,并收到加载错误:
./mytest: error while loading shared libraries: libshared.so: cannot open shared object file: No such file or directory
- 所以我尝试告诉加载程序在我的私有目录中搜索共享库文件:
ldconfig -n home/.../my_shared_library
(当我的工作目录是 home/.../my_shared_library 时,我也尝试过:ldconfig -n .-L)
并尝试再次运行它,但我仍然遇到同样的错误。我做错了什么?
【问题讨论】: