如何打印 ld(链接器)搜索路径

2024-10-10 09:28:00
admin
原创
276
摘要:问题描述:如何按照ld搜索的顺序打印其查找的搜索路径。解决方案 1:您可以通过执行以下命令来执行此操作:ld --verbose | grep SEARCH_DIR | tr -s ' ;' \012 gcc将一些额外的 -L 路径传递给链接器,您可以使用以下命令列出它们:...

问题描述:

如何按照ld搜索的顺序打印其查找的搜索路径。


解决方案 1:

您可以通过执行以下命令来执行此操作:

ld --verbose | grep SEARCH_DIR | tr -s ' ;' \012

gcc将一些额外的 -L 路径传递给链接器,您可以使用以下命令列出它们:

gcc -print-search-dirs | sed '/^lib/b 1;d;:1;s,/[^/.][^/]*/../,/,;t 1;s,:[^=]*=,:;,;s,;,;  ,g' | tr ; \012

建议使用 ld.so.conf 和 ldconfig 的答案并不正确,因为它们引用的是运行时动态链接器搜索的路径(即每当执行程序时),这与ld搜索的路径(即每当链接程序时)不同。

解决方案 2:

在 Linux 上,你可以使用ldconfig,它维护 ld.so 配置和缓存,打印出使用以下命令搜索的目录ld.so

ldconfig -v 2>/dev/null | grep -v ^$'    '

ldconfig -v打印出链接器搜索的目录(不带前导制表符)以及在这些目录中找到的共享库(带前导制表符);获取grep目录。在我的计算机上,此行打印出

/usr/lib64/atlas:
/usr/lib/llvm:
/usr/lib64/llvm:
/usr/lib64/mysql:
/usr/lib64/nvidia:
/usr/lib64/tracker-0.12:
/usr/lib/wine:
/usr/lib64/wine:
/usr/lib64/xulrunner-2:
/lib:
/lib64:
/usr/lib:
/usr/lib64:
/usr/lib64/nvidia/tls: (hwcap: 0x8000000000000000)
/lib/i686: (hwcap: 0x0008000000000000)
/lib64/tls: (hwcap: 0x8000000000000000)
/usr/lib/sse2: (hwcap: 0x0000000004000000)
/usr/lib64/tls: (hwcap: 0x8000000000000000)
/usr/lib64/sse2: (hwcap: 0x0000000004000000)

行中没有 的第一个路径hwcap是内置的,或者从 /etc/ld.so.conf 读取的。然后,链接器可以在基本库搜索路径下搜索其他目录,这些目录的名称sse2与额外的 CPU 功能相对应。这些路径(hwcap行中没有 )可以包含为这些 CPU 功能量身定制的额外库。

最后要注意的是:使用上面的-p而不是-v搜索ld.so缓存。

解决方案 3:

我不确定是否有任何选项可以简单地打印完整的有效搜索路径。

但是:搜索路径由-L命令行选项指定的目录以及SEARCH_DIR("...")链接器脚本中的指令添加到搜索路径的目录组成。因此,如果您能看到这两个目录,就可以解决问题,具体操作如下:

如果您ld直接调用:

  • 选项-L就是您所说的一切。

  • 要查看链接器脚本,请添加--verbose选项。查找SEARCH_DIR("...")指令,通常位于输出顶部附近。(请注意,这些指令不一定每次调用时都相同ld——链接器有许多不同的内置默认链接器脚本,并根据各种其他链接器选项在它们之间进行选择。)

如果您通过以下方式链接gcc

  • 您可以将-v选项传递给,gcc以便它向您显示如何调用链接器。事实上,它通常不会ld直接调用,而是通过名为的工具collect2(位于其内部目录之一)间接调用,该工具又调用ld。这将向您显示-L正在使用的选项。

  • 您可以添加-Wl,--verbose选项gcc以使其传递--verbose到链接器,以查看如上所述的链接器脚本。

解决方案 4:

我发现的与 Linux 上的 gcc 和 clang 最兼容的命令(感谢 armando.sano):

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

如果您给出-m32,它将输出正确的库目录。

我的机器上的示例:

为了g++ -m64

/usr/x86_64-linux-gnu/lib64
/usr/i686-linux-gnu/lib64
/usr/local/lib/x86_64-linux-gnu
/usr/local/lib64
/lib/x86_64-linux-gnu
/lib64
/usr/lib/x86_64-linux-gnu
/usr/lib64
/usr/local/lib
/lib
/usr/lib

为了g++ -m32

/usr/i686-linux-gnu/lib32
/usr/local/lib32
/lib32
/usr/lib32
/usr/local/lib/i386-linux-gnu
/usr/local/lib
/lib/i386-linux-gnu
/lib
/usr/lib/i386-linux-gnu
/usr/lib

解决方案 5:

该问题标记为 Linux,但也许这在 Linux 下也能起作用?

gcc -Xlinker -v

在 Mac OS X 下,这将打印:

@(#)PROGRAM:ld  PROJECT:ld64-224.1
configured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 armv6m armv7m armv7em
Library search paths:
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/lib
Framework search paths:
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/
[...]

-Xlinker上面的选项就gcc直接传递-v给了ld。但是:

ld -v

不打印搜索路径。

解决方案 6:

Mac 版本:$ ld -v 2,不知道如何获取详细路径。输出

Library search paths:
    /usr/lib
    /usr/local/lib
Framework search paths:
    /Library/Frameworks/
    /System/Library/Frameworks/
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2079  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1459  
  建筑行业正处于数字化转型的关键时期,建筑产品生命周期管理(PLM)系统的实施对于提升项目效率、质量和协同性至关重要。特别是在 2025 年,基于建筑信息模型(BIM)的项目进度优化工具成为众多建筑企业关注的焦点。这些工具不仅能够整合项目全生命周期的数据,还能通过精准的分析和模拟,为项目进度管理提供强大支持。BIM 与建...
plm是什么软件   0  
  PLM系统开发的重要性与现状PLM(产品生命周期管理)系统在现代企业的产品研发、生产与管理过程中扮演着至关重要的角色。它贯穿产品从概念设计到退役的整个生命周期,整合了产品数据、流程以及人员等多方面的资源,极大地提高了企业的协同效率和创新能力。通过PLM系统,企业能够实现产品信息的集中管理与共享,不同部门之间可以实时获取...
国产plm软件   0  
  PLM(产品生命周期管理)系统在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和技术的飞速发展,企业对PLM系统的迭代周期优化需求日益迫切。2025年敏捷认证对项目管理提出了新的要求,其中燃尽图作为一种强大的可视化工具,在PLM系统迭代周期优化中有着广泛且重要的应用。深入探讨这些应用,对于提升企业的项...
plm系统主要干什么的   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用