2012-10-15 33 views
0

我有一個鏈接錯誤,我應該在Unix上使用nm命令修復。鏈接錯誤 - 使用nm修復

如果我有下述連接錯誤:undefined reference to 'program_name',和在該對象文件運行nm時,program_name符號被示出爲在符號表如下:U program_name

我知道program_name是未定義的,並且定義在另一個需要包含在原始目標文件中的目標文件中。我的問題是:我怎樣才能找到它是哪個對象文件?那可能嗎?我在目錄中有一堆目標文件,它會是其中的一個。有太多的嘗試所有這些。

+0

你也可以將所有的目標文件放到一個歸檔庫中,並與其鏈接。 –

+0

nm -opr * .o; ........ – bmargulies

回答

1

你可以這樣做:在輸出

$ nm *.o 

查找program_name(假設你有一個.o擴展你的目標文件)。

3

是的。輸出中不是U,而是在具有已定義符號的目標文件中找到T(用於「文本段」)。像這樣的東西應該工作(在bash):

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

在這裏,我遍歷所有* .o文件,並取其那些有定義的符號得到他們的文件名打印出來。

0

嘗試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`