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

2024-10-10 09:28:00
admin
原创
90
摘要:问题描述:如何按照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/
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用