San*_*ens 5 c linux gcc shared-libraries dynamic-linking
我想在 Linux 中对我的可执行文件中的库路径进行硬编码。在 OS X 上,这是通过在构建库时在 -o 参数之后提供完整路径来实现的。例如,我在 OS X 上构建了一个这样的库:
cc foo.c --shared -o /home/sander/libfoo.so
Run Code Online (Sandbox Code Playgroud)
当我构建一个与该库链接的名为“bar”的可执行文件时,我在该可执行文件上使用 otool -L 时,我得到以下输出:
bar:
/home/sander/libfoo.so (compatibility version 0.0.0, current version 0.0.0)
Run Code Online (Sandbox Code Playgroud)
我现在可以从任何地方运行这个可执行文件,它总是能够找到库。
我正在使用 gcc 在 Linux 上寻找等效的功能。我宁愿不使用 rpath,因为它没有链接到特定的库 + 路径。
就这样编译它,所以不要使用-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
Run Code Online (Sandbox Code Playgroud)
编辑:我最初在 OS X 上写道,在-o
选项后指定绝对路径还是相对路径无关紧要。这是不正确的。它确实会影响 Mach-OLC_ID_DYLIB
加载命令中库的“名称” 。感谢@Sander Mertens 让我知道。
归档时间: |
|
查看次数: |
1424 次 |
最近记录: |