我正在玩共享库链接和加载过程,并试图了解解决加载错误的不同方法:
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
。这就是我的所作所为:
$ gcc -Wall -fPIC -c *.c
$ gcc -shared -Wl,-soname,libshared.so -o libshared.so *.o
...
只是我个人共享库路径的缩写): $ 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
并尝试再次运行它,但我仍然得到同样的错误。我做错了什么?
答案 0 :(得分:2)
使用GNU Libtool简化流程并避免此类错误。
在构建库时也使用EditText
选项。
答案 1 :(得分:0)
阅读Program Library HowTo& Drepper的论文:How to Write Shared Libraries
您可能想要设置rpath。请参阅this question。
您可以在运行时使用dlopen(3)加载插件。请注意,没有任何/
的共享对象路径是专门处理的。