我见过this https://stackoverflow.com/a/5817315/7724939文章并了解到:
- 在命令行上指定的目录
-L
在默认目录之前搜索选项。
- 中指定的目录
-L
按照在命令行中指定的顺序进行搜索。
问题是:默认目录有搜索顺序吗?
例如,如果我运行以下命令:
$ gcc -Xlinker --verbose 2>/dev/null | grep SEARCH | sed 's/SEARCH_DIR("=\?\([^"]\+\)"); */\1\n/g' | grep -vE '^$'
(命令复制自本文 https://stackoverflow.com/a/29546339/7724939)
它打印出来/usr/local/lib
before /usr/lib
在我的机器上(Ubuntu 16.04,64位,gcc 5.4.0)。在这种情况下,将/usr/local/lib
之前被搜索过/usr/lib
?
来自binutils ld 手册 https://sourceware.org/binutils/docs/ld/index.html部分3.4.2 处理文件的命令 https://sourceware.org/binutils/docs/ld/File-Commands.html:
SEARCH_DIR(路径)
SEARCH_DIR 命令将路径添加到 ld 查找存档库的路径列表中。使用 SEARCH_DIR(path) 与在命令行上使用“-L path”完全相同(请参阅命令行选项)。如果两者都使用,则链接器将搜索这两个路径。首先搜索使用命令行选项指定的路径。
所以,是的,因为默认目录在默认链接描述文件使用这个SEARCH_DIR()
命令,将按照命令的顺序搜索它们SEARCH_DIR()
命令出现。
例如,在我的mingw
安装时,默认链接描述文件开始如下:
/* Default linker script, for normal executables */
/* Copyright (C) 2014-2017 Free Software Foundation, Inc.
Copying and distribution of this script, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. */
OUTPUT_FORMAT(pei-i386)
SEARCH_DIR("=/mingw32/i686-w64-mingw32/lib");
SEARCH_DIR("=/mingw32/lib");
SEARCH_DIR("=/usr/local/lib");
SEARCH_DIR("=/lib");
SEARCH_DIR("=/usr/lib");
--> 一个图书馆/usr/local/lib
可以覆盖库/lib
and /usr/lib
,但不是由以下提供的库mingw
itself.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)