gpt4 book ai didi

linux - 使 GNU ld 或 GNU gold 显示存档中使用了哪些 .o 文件

转载 作者:太空狗 更新时间:2023-10-29 12:04:02 24 4
gpt4 key购买 nike

我正在尝试链接 C++ 二进制文件,但出现 undefined symbol 错误。我的二进制文件不需要这些符号,我想了解导致链接器(GNU ld 或 GNU gold)认为需要它们的依赖链。 libfoo.a 包含数百个 .o 文件。我的程序正在调用 libfoo.a 中的函数。我想获得一个包含所有 .o 文件的依赖关系图 libfoo.a 链接器认为需要链接我的程序。

我需要它,因为我怀疑 libfoo.a 中某处存在错误,调用了并非真正需要的函数。我可以修改 libfoo.a 的源代码(从而删除不需要的调用),为此我需要了解不需要的调用在哪里。依赖图可以帮助我找到它。

请注意,由于 undefined symbol ,没有生成可执行文件。

请注意,我的最终目标不是构建这个特定的二进制文件,而是确保不会在 libfoo.a 中调用不需要的函数。

我查看了 man ld,但我找不到任何可以给我更详细输出的命令行标志。

链接器错误示例:

libfoo++.a(foo1.o):foo1.cc:function foo1f: error: undefined reference to 'bar'

我如何找出导致 foo1.o 链接到可执行文件的原因? (对我来说 bar 是未定义的,因为我不需要它。我的问题是 foo1.o 是需要的,但它不应该是,并且我想删除导致 foo1.o 被链接的调用。)

最佳答案

I'd like to get a dependency graph containing all .o files in libfoo.a which the linker thinks are needed to link my program.

-M(或 --print-map)标志打印的链接器映射恰好包含该信息。如果您使用编译器驱动程序(例如 gcc)执行链接(您应该),则将 -Wl,-M 添加到链接行。

关于linux - 使 GNU ld 或 GNU gold 显示存档中使用了哪些 .o 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21509907/

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