如何使用不使用-l的GCC链接或不遵循libNAME.so命名约定的库的硬编码路径?

kbl*_*uck 42 c c++ linker gcc shared-libraries

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

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

例如:

g++ -o build/bin/myapp build/bin/_mylib.so
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*hme 69

有一个":"前缀,允许您为库提供不同的名称.如果你使用

g++ -o build/bin/myapp -l:_mylib.so other_source_files
Run Code Online (Sandbox Code Playgroud)

应该在路径中搜索_mylib.so.

  • 我发现这导致`build/bin/_mylib.so`嵌入在使用`-l:`链接的库中 - 而不是像通常对标准soname那样嵌入`_mylib.so`.因此,当您尝试加载`_mylib.so`时,它将寻找完整路径(`ldd`将显示它)并且不会自己找到`_mylib.so`. (3认同)