gpt4 book ai didi

c++ - 链接库时默认目录上的 gcc 或 g++ 路径搜索顺序

转载 作者:太空宇宙 更新时间:2023-11-04 03:22:17 26 4
gpt4 key购买 nike

我看过 this文章并了解到:

  1. 在默认目录之前搜索命令行上使用 -L 选项指定的目录。
  2. -L 中指定的目录按照它们在命令行中指定的顺序进行搜索。

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

例如,如果我运行这个命令:

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

(从 this article 复制的命令)

在我的机器(Ubuntu 16.04、64 位、gcc 5.4.0)中,它在 /usr/lib 之前打印出 /usr/local/lib。这样的话,/usr/local/lib会先于/usr/lib搜索吗?

最佳答案

来自binutils ld manual3.4.2 Commands Dealing with Files :

SEARCH_DIR(path)

The SEARCH_DIR command adds path to the list of paths where ld looks for archive libraries. Using SEARCH_DIR(path) is exactly like using `-L path' on the command line (see Command Line Options). If both are used, then the linker will search both paths. Paths specified using the command line option are searched first.

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

关于c++ - 链接库时默认目录上的 gcc 或 g++ 路径搜索顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44401829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com