0

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

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

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

4

3 回答 3

3

是的。U您将T在已定义符号的目标文件中找到一个(用于“文本段”),而不是输出中的 a 。像这样的东西应该可以工作(在bash中):

for f in *.o; do if (nm "$f" | grep 'T program_name'); then echo "$f" matches; fi; done

在这里,我遍历了所有 *.o 文件,并且无论哪个定义了符号,都会打印出它们的文件名。

于 2012-10-15T17:45:12.980 回答
1

你可以这样做:

$ nm *.o 

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

于 2012-10-15T17:39:33.070 回答
0

尝试nm -o *.o |grep program_name查找符号类型为“T”的 .o 文件(假设它是函数名)。-onm的选项在每行前面加上文件名。根据您的操作系统, nm 可能有也可能没有此选项(也可能有-A),因此请检查您的联机帮助页。如果它根本不存在,那么您需要编写一个 shell for 循环,例如

for obj in *.obj; do 
  echo $obj:
  nm $obj | grep program_name
done`
于 2012-10-15T17:48:12.210 回答