链接器找不到.so文件

时间:2016-02-02 03:04:29

标签: c++ c linker makefile

我正在使用其他.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

3 个答案:

答案 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表示硬编码二进制文件的路径,我认为使用相对路径不是一个好主意。