ld库搜索非标准库名称的路径

时间:2016-04-01 10:09:07

标签: gcc linker ld

我有一个名为_myname.so的共享库,而不是libmyname.so(因为它是Python接口)。 我想将C ++代码链接到这个lib。 如果我将它放在当前目录中并使用以下方法链接它,它可以正常工作:

g++ -o _myother.so myother.o _myname.so ... -shared

但是,如果_myname.so在另一个目录中,我必须放置路径,并且在运行时,库将被查找到相同的路径而不是标准位置(LD_LIBRARY_PATH等)。< / p>

有没有办法可以指定ld的搜索路径(如果我的库名为libmyname.so,则使用-L),所以在运行时_myname.so是在标准位置搜索的?

1 个答案:

答案 0 :(得分:2)

在GNU Binutils的2.18版本中,一个功能被添加到ld,允许通过其确切名称指定库。

从当前ld手册页:

  -l namespec
  --library=namespec
      Add the archive or object file specified by namespec to the list of files to link.
      This option may be used any number of times.  If namespec is of the form :filename,
      ld will search the library path for a file called filename, otherwise it will
      search the library path for a file called libnamespec.a.

对于原始问题,:filename namespec形式的使用方式如下:

g++ -o _myother.so myother.o -L../myname/ -l:_myname.so -shared
  • 选项-L../myname/将路径../myname/添加到库搜索路径。此路径应包含链接时_myname.so的位置。
  • -l:_myname.so选项告诉ld搜索具有确切名称_myname.so的库。搜索时,lib前缀和.so后缀未添加到_myname.so

在运行时,将在标准位置搜索共享库_myname.so