首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接错误-使用nm修复

链接错误-使用nm修复
EN

Stack Overflow用户
提问于 2012-10-16 01:38:12
回答 3查看 590关注 0票数 0

我有一个链接错误,我应该在Unix上使用nm命令来修复它。

如果我有以下链接错误:undefined reference to 'program_name',并且在该目标文件上运行nm时,program_name符号在符号表中显示如下:U program_name

我知道program_name是未定义的,并且是在另一个目标文件中定义的,该目标文件需要包含在原始目标文件中。我的问题是:我如何才能找到它是哪个目标文件?这有可能吗?我在一个目录中有一堆目标文件,它可能是其中之一。有太多的方法去尝试所有的方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-16 01:39:33

您可以这样做:

代码语言:javascript
复制
$ nm *.o 

在输出中查找program_name (假设您的目标文件具有.o扩展名)。

票数 1
EN

Stack Overflow用户

发布于 2012-10-16 01:45:13

是。您将在定义了符号的目标文件中找到一个T (代表“文本段”),而不是在输出中找到一个U。这样的代码应该可以工作(在bash中):

代码语言:javascript
复制
for f in *.o; do if (nm "$f" | grep 'T program_name'); then echo "$f" matches; fi; done

在这里,我循环遍历所有的*.o文件,任何定义了符号的文件都将其文件名打印出来。

票数 3
EN

Stack Overflow用户

发布于 2012-10-16 01:48:12

尝试nm -o *.o |grep program_name并查找符号类型为"T“的.o文件(假设它是一个函数名)。nm的-o选项为每行添加文件名前缀。根据操作系统的不同,nm可能有也可能没有这个选项(也可能是-A),所以请查看您的手册页。如果它根本不存在,那么您将需要编写一个shell for loop,类似于

代码语言:javascript
复制
for obj in *.obj; do 
  echo $obj:
  nm $obj | grep program_name
done`
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12901030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档