如何在Linux上硬编码动态库路径

时间:2015-05-09 19:13:32

标签: c linux gcc shared-libraries dynamic-linking

我想在Linux中硬编码可执行文件中的库的路径。在OS X上,这是通过在构建库时在-o参数之后提供完整路径来实现的。例如,我在OS X上构建了一个这样的库:

cc foo.c --shared -o /home/sander/libfoo.so

当我构建一个名为'bar'的可执行文件链接到这个库时,我在可执行文件上使用otool -L,我得到了这个输出:

bar:
    /home/sander/libfoo.so (compatibility version 0.0.0, current version 0.0.0)

我现在可以从任何地方运行这个可执行文件,它始终能够找到库。

我正在寻找与gcc Linux相同的功能。我宁愿不使用rpath,因为它没有链接到特定的库+路径。

1 个答案:

答案 0 :(得分:4)

只需这样编译,所以不要使用-llib,但要将其指定为编译对象:

cd /full/path/to/lib
gcc -shared -fpic -o liblib.so lib.c             # make the lib
gcc -c -o prog.o prog.c                          # compile program
gcc -o prog prog.o "/full/path/to/lib/liblib.so" # link everything together

编辑:我最初在OS X上写道,在-o选项之后是否指定了绝对或相对路径无关紧要。那是不正确的。它确实影响了图书馆的名称"在Mach-O LC_ID_DYLIB加载命令中。谢谢@Sander Mertens让我知道。