我正在使用其他.so
.so
文件
mylib.so: mylib.o
ld -shared -o mylib.so packer.o mylib.o -ldl -L../lib -lcustombuild
server: server.o packer.o
gcc packer.o server.o -o server -L../lib -lcustombuild
文件libcustombuild
在dir lib中比当前目录高一级(即../lib)
当我运行./server
时,它会抛出错误:error while loading shared libraries: libcustombuild.so: cannot open shared object file: No such file or directory
我确定.so文件在正确的目录中。
ls ../lib
输出:libcustombuild.so
答案 0 :(得分:2)
-L只告诉链接器在哪里可以找到链接时库。运行时库加载器仍然需要知道.so文件。
所以你需要使用类似LD_LIBRARY_PATH
环境变量或rpath
链接器选项的东西来告诉加载器在哪里找到.so文件,或者将.so文件放到一个文件中系统库路径。
有关详细信息,请参阅rpath - Wikipedia。
答案 1 :(得分:0)
好的,这就是我如何修理它:
mylib.so: mylib.o
ld -shared -o mylib.so packer.o mylib.o -ldl -L../lib -lcustombuild
server: server.o packer.o
gcc packer.o server.o -o server -L../lib -lcustombuild
和
export LD_LIBRARY_PATH=../lib
-Wl,-rpath
不是ld的有效命令
答案 2 :(得分:0)
是的,-Wl,-rpath
不是ld的有效命令。事实上,它是gcc / g ++作为链接器选项的一个选项。 -Wl
表示在调用逗号后将参数传递给链接器。
并且,由于rpath表示硬编码二进制文件的路径,我认为使用相对路径不是一个好主意。