gpt4 book ai didi

linux - g++ 搜索/lib/../lib/,然后搜索/lib/

转载 作者:太空狗 更新时间:2023-10-29 11:06:36 28 4
gpt4 key购买 nike

根据 g++ -print-search-dirs,我的 C++ 编译器正在许多目录中搜索库,包括 ...

  • /lib/../lib/:
  • /usr/lib/../lib/:
  • /库/:
  • /usr/lib/

天真地,/lib/../lib/ 看起来与 /lib/ 是同一个目录——lib 的父级将有一个名为 lib 的子级,“那人的父亲的儿子是我父亲的儿子的儿子”等等。 /usr/lib/../lib//usr/lib/

也是如此
  1. 是否有某种原因,也许与符号链接(symbolic link)有关,g++ 应该配置为同时搜索​​ /lib/../lib//lib/?

  2. 如果这是不必要的冗余,人们将如何解决它?

如果重要的话,这是在未经修改的 Ubuntu 9.04 安装上观察到的。

编辑:更多信息。

结果来自从 bash shell 执行 g++ -print-search-dirs,没有其他开关。

printenv 没有输出 LIBRARY_PATH 和 LPATH,echo $LPATHecho LIBRARY_PATH 都返回空行。

最佳答案

尝试寻找答案(这是我在查看 gcc.c 驱动程序源代码和 Makefile 环境的几分钟后收集到的)。

这些路径是在运行时构建的:

  1. GCC exec 前缀(参见 GCC_EXEC_PREFIX 上的 GCC documentation)
  2. $LIBRARY_PATH 环境变量
  3. $LPATH 环境变量(被视为$LIBRARY_PATH)
  4. 传递给 -B 命令行开关的任何值
  5. 标准可执行前缀(在编译时指定)
  6. Tooldir 前缀

最后一个(tooldir前缀)通常定义为相对路径:来自 gcc 的 Makefile.in

# Directory in which the compiler finds libraries etc.
libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(version)
# Directory in which the compiler finds executables
libexecsubdir = $(libexecdir)/gcc/$(target_noncanonical)/$(version)
# Used to produce a relative $(gcc_tooldir) in gcc.o
unlibsubdir = ../../..
....
# These go as compilation flags, so they define the tooldir base prefix
# as ../../../../, and the one of the library search prefixes as ../../../
# These get PREFIX appended, and then machine for which gcc is built
# i.e i484-linux-gnu, to get something like:
# /usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../i486-linux-gnu/lib/../lib/
DRIVER_DEFINES = \
-DSTANDARD_STARTFILE_PREFIX=\"$(unlibsubdir)/\" \
-DTOOLDIR_BASE_PREFIX=\"$(unlibsubdir)/../\" \

但是,这些是针对编译器版本特定的路径。您的示例可能会受到我上面列出的环境变量的影响(LIBRARY_PATHLPATH)

关于linux - g++ 搜索/lib/../lib/,然后搜索/lib/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/990370/

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