ld 非标准库名称的库搜索路径
ld library search path for non-standard library name
我有一个名为 _myname.so 而不是 libmyname.so 的共享库(因为它是 Python 接口)。
我想 link 针对此库的 C++ 代码。
如果我将它放在当前目录中并使用 link 它工作正常:
g++ -o _myother.so myother.o _myname.so ... -shared
但是,如果 _myname.so 在其他目录中,我必须输入路径,并且在 运行 时,库将在同一路径而不是标准位置中查找(LD_LIBRARY_PATH 等等)。
有没有一种方法可以指定 ld 的搜索路径(如果我的库被命名为 libmyname.so,则使用 -L),所以在 运行 时间 _myname.so 被搜索在标准位置?
在 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.
对于原题,namespec
的:filename
形式是这样使用的:
g++ -o _myother.so myother.o -L../myname/ -l:_myname.so -shared
- 选项
-L../myname/
将路径 ../myname/
添加到库搜索路径。此路径应包含 link 时间 _myname.so
的位置。
-l:_myname.so
选项告诉 ld
搜索具有确切名称 _myname.so
的库。搜索时 lib
前缀和 .so
后缀未添加到 _myname.so
。
在 运行 时,在标准位置搜索共享库 _myname.so
。
我有一个名为 _myname.so 而不是 libmyname.so 的共享库(因为它是 Python 接口)。 我想 link 针对此库的 C++ 代码。 如果我将它放在当前目录中并使用 link 它工作正常:
g++ -o _myother.so myother.o _myname.so ... -shared
但是,如果 _myname.so 在其他目录中,我必须输入路径,并且在 运行 时,库将在同一路径而不是标准位置中查找(LD_LIBRARY_PATH 等等)。
有没有一种方法可以指定 ld 的搜索路径(如果我的库被命名为 libmyname.so,则使用 -L),所以在 运行 时间 _myname.so 被搜索在标准位置?
在 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.
对于原题,namespec
的:filename
形式是这样使用的:
g++ -o _myother.so myother.o -L../myname/ -l:_myname.so -shared
- 选项
-L../myname/
将路径../myname/
添加到库搜索路径。此路径应包含 link 时间_myname.so
的位置。 -l:_myname.so
选项告诉ld
搜索具有确切名称_myname.so
的库。搜索时lib
前缀和.so
后缀未添加到_myname.so
。
在 运行 时,在标准位置搜索共享库 _myname.so
。