链接错误 - 使用 nm 修复
Posted
技术标签:
【中文标题】链接错误 - 使用 nm 修复【英文标题】:Linking Error - Use nm to fix 【发布时间】:2012-10-15 17:38:11 【问题描述】:我有一个链接错误,我应该在 Unix 上使用 nm
命令修复它。
如果我有以下链接错误:undefined reference to 'program_name'
,并且在该目标文件上运行nm
时,program_name
符号在符号表中显示如下:U program_name
。
我知道program_name
是未定义的,并且定义在另一个需要包含在原始目标文件中的目标文件中。我的问题是:我怎样才能找到它是哪个目标文件?那可能吗?我在一个目录中有一堆目标文件,它就是其中之一。太多了,无法全部尝试。
【问题讨论】:
您还可以将所有目标文件放入存档库并链接。 【参考方案1】:是的。您将在已定义符号的目标文件中找到 T
(用于“文本段”),而不是输出中的 U
。像这样的东西应该可以工作(在 bash 中):
for f in *.o; do if (nm "$f" | grep 'T program_name'); then echo "$f" matches; fi; done
在这里,我循环遍历所有 *.o 文件,无论哪个定义了符号,都会打印出它们的文件名。
【讨论】:
【参考方案2】:你可以这样做:
$ nm *.o
在输出中查找program_name
(假设您的目标文件有.o
扩展名)。
【讨论】:
【参考方案3】:尝试nm -o *.o |grep program_name
并查找符号类型为“T”的 .o 文件(假设它是函数名)。 nm 的 -o
选项为每一行添加文件名前缀。根据您的操作系统,nm 可能有也可能没有此选项(也可能是-A
),因此请查看您的联机帮助页。如果它根本不存在,那么您需要编写一个 shell for 循环,类似于
for obj in *.obj; do
echo $obj:
nm $obj | grep program_name
done`
【讨论】:
以上是关于链接错误 - 使用 nm 修复的主要内容,如果未能解决你的问题,请参考以下文章
使用 npm 链接时如何修复“任务不在您的 gulpfile 中”错误?
如何修复 Xcode 中的“_sqlite3_prepare_v3”链接器错误
配置 Qt .pro 文件以使用 cl.exe 和 link.exe 来修复链接错误
如何修复损坏的链接 wordpress web config rewrite index.php 损坏站点链接错误 404