链接库时的默认目录上的GCC或G 路径搜索顺序

gcc or g++ path search order on default directories when linking libraries

本文关键字:GCC 路径搜索 顺序 默认 链接      更新时间:2023-10-16

我已经看过这篇文章,并了解到:

  1. 在默认目录之前搜索具有-L选项的命令行上指定的目录。
  2. -L中指定的目录按在命令行上指定的顺序搜索。

问题是:是否有默认目录的搜索顺序?

例如,如果我运行此命令:

$ gcc -Xlinker --verbose  2>/dev/null | grep SEARCH | sed 's/SEARCH_DIR("=?([^"]+)"); */1n/g'  | grep -vE '^$'

(从本文中复制命令(

它在我的计算机中的/usr/lib之前打印出/usr/local/lib(Ubuntu 16.04,64位,GCC 5.4.0(。在这种情况下,会在/usr/lib之前搜索/usr/local/lib

来自Binutils LD手动部分 3.4.2命令与文件打交道

search_dir(路径(

search_dir命令将路径添加到LD寻找存档库的路径列表中。使用search_dir(路径(就像在命令行上使用``-l路径''(请参阅命令行选项(。如果两者都使用,则链接器将搜索两个路径。首先搜索使用命令行选项指定的路径。

所以,是的,因为默认目录是在默认链接器脚本中给出的使用此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本身提供的库。