我看过this文章并了解到:
-L
选项指定的目录。-L
中指定的目录按照在命令行中指定的顺序进行搜索。问题是:是否有默认目录的搜索顺序?
例如,如果我运行此命令:
$ gcc -Xlinker --verbose 2>/dev/null | grep SEARCH | sed 's/SEARCH_DIR("=\?\([^"]\+\)"); */\1\n/g' | grep -vE '^$'
(从this article复制的命令)
它在我的机器中的/usr/local/lib
之前打印出/usr/lib
(Ubuntu 16.04,64位,gcc 5.4.0)。在这种情况下,会在/usr/local/lib
之前搜索/usr/lib
吗?
答案 0 :(得分:1)
来自binutils ld manual部分3.4.2 Commands Dealing with Files:
SEARCH_DIR(路径)
SEARCH_DIR命令添加路径到ld查找归档库的路径列表。使用SEARCH_DIR(路径)就像使用`-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
和/usr/lib
中的库,但不能覆盖mingw
本身提供的库。