我想在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,因为它没有链接到特定的库+路径。
答案 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让我知道。