对于不遵循libNAME.so命名约定的库,如何使用不带-l或硬编码路径的GCC进行链接

How to link using GCC without -l nor hardcoding path for a library that does not follow the libNAME.so naming convention?

本文关键字:编码 路径 链接 GCC 何使用 so libNAME 于不遵 命名约定      更新时间:2023-10-16

我有一个共享库,希望使用GCC链接可执行文件。共享库的名称不是libNAME.so格式的非标准名称,因此我不能使用常用的-l选项。(它恰好也是Python扩展,因此没有"lib"前缀。)

我可以将库文件的路径直接传递到链接命令行,但这会导致库路径被硬编码到可执行文件中。

例如:

g++ -o build/bin/myapp build/bin/_mylib.so

有没有一种方法可以链接到这个库,而不会导致路径被硬编码到可执行文件中?

g++的-l选项有一个":"前缀,允许您使用具有非常规文件名的库。命令

g++ -o build/bin/myapp -l:_mylib.so other_source_files

应该在路径中搜索文件名为_mylib.so.的共享库

如果您可以在调用g++时将共享库复制到工作目录,那么这应该可以工作:

g++ -o build/bin/myapp _mylib.so other_source_files

如果你在Unix或Linux上,我认为你可以在你想要库的目录中创建一个指向库的符号链接

例如:
ln -s build/bin/_mylib.so build/bin/lib_mylib.so

然后可以使用-l_mylib

http://en.wikipedia.org/wiki/Symbolic_link