我有一个链接错误,我应该在Unix上使用nm命令来修复它。
如果我有以下链接错误:undefined reference to 'program_name',并且在该目标文件上运行nm时,program_name符号在符号表中显示如下:U program_name。
我知道program_name是未定义的,并且是在另一个目标文件中定义的,该目标文件需要包含在原始目标文件中。我的问题是:我如何才能找到它是哪个目标文件?这有可能吗?我在一个目录中有一堆目标文件,它可能是其中之一。有太多的方法去尝试所有的方法。
发布于 2012-10-16 01:39:33
您可以这样做:
$ nm *.o 在输出中查找program_name (假设您的目标文件具有.o扩展名)。
发布于 2012-10-16 01:45:13
是。您将在定义了符号的目标文件中找到一个T (代表“文本段”),而不是在输出中找到一个U。这样的代码应该可以工作(在bash中):
for f in *.o; do if (nm "$f" | grep 'T program_name'); then echo "$f" matches; fi; done在这里,我循环遍历所有的*.o文件,任何定义了符号的文件都将其文件名打印出来。
发布于 2012-10-16 01:48:12
尝试nm -o *.o |grep program_name并查找符号类型为"T“的.o文件(假设它是一个函数名)。nm的-o选项为每行添加文件名前缀。根据操作系统的不同,nm可能有也可能没有这个选项(也可能是-A),所以请查看您的手册页。如果它根本不存在,那么您将需要编写一个shell for loop,类似于
for obj in *.obj; do
echo $obj:
nm $obj | grep program_name
done`https://stackoverflow.com/questions/12901030
复制相似问题