链接器以哪种顺序处理库目录?

Leo*_*nid 6 c++ linker sunos

编译期间,搜索路径中可能存在多个库实例.链接器处理目录以什么顺序包含在搜索路径中?有问题的平台是Sun OS.

小智 7

将按照在命令行中指定目录的顺序搜索目录.在默认目录之前搜索命令行中指定的目录.无论选项出现的顺序如何,所有-L选项都适用于所有-l选项.LD_LIBRARY_PATH也可用于补充库搜索路径.目录搜索在包含匹配库的第一个目录处停止.

LD_LIBRARY_PATH虽然很棘手:

LD_LIBRARY_PATH 
Run Code Online (Sandbox Code Playgroud)

用于搜索使用-l选项指定的库的目录列表.多个目录由冒号分隔.在最常见的情况下,它将包含由分号分隔的两个目录列表:

dirlist1; dirlist2 
Run Code Online (Sandbox Code Playgroud)

如果使用任意数量的-L调用ld,如:

ld . . . -Lpath1 . . . -Lpathn . . .
Run Code Online (Sandbox Code Playgroud)

然后搜索路径排序是:

         dirlist1 path1 . . . pathn dirlist2 LIBPATH
Run Code Online (Sandbox Code Playgroud)

当目录列表不包含分号时,它将被解释为dirlist2.

LD_LIBRARY_PATH还用于指定运行时链接程序的库搜索目录.也就是说,如果环境中存在LD_LIBRARY_PATH,则运行时链接程序将在其默认目录之前搜索其中指定的目录,以便共享对象在执行时与程序链接.

在这里阅读更多相关信息.