我只是想知道是否有一種有效的技術來解決gcc中未定義的符號問題。有時我的一個項目無法鏈接,我通常會花費大量時間來查找原因。通常這是一個深藏在makefile中的錯字,錯誤的環境變量或類似的東西。如果你的構建突然與「未定義的符號」一起死亡,你使用了什麼方法,這是不明顯的原因?未定義符號的一般故障排除技術 - gcc
10
A
回答
23
說這是我開始的配置:
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
bar.o: In function `baz()':
bar.cpp:(.text+0xd): undefined reference to `Foo::bar()'
collect2: ld returned 1 exit status
我開始使用grep缺少的符號查找到所有的.o和.lib文件。
$ grep 'Foo.*bar' *.o *.lib *.so
Binary file bar.o matches
Binary file foo.o matches
然後我用個nm
工具來檢查每個對象文件,如果符號存在缺失或執行。
$ nm foo.o
00000000 T _ZN3Foo3barEv
$ nm bar.o
00000000 T _Z3bazv
U _ZN3Foo3barEv
U __gxx_personality_v0
現在我知道Foo :: bar()是在foo.o中實現的,並且可以將該文件鏈接到可執行文件中。因此下一部分是檢查爲什麼foo.o不包含在鏈接命令中。
有時您找不到任何實施符號。通常情況下,執行單元未生成或者不包含符號(#ifdef
,符號可見性)。在這種情況下,我搜索定義符號的.cpp文件,運行make $file.o
以生成文件,然後檢查文件。當smbol在那裏時,我會繼續構建放置該文件的庫或可執行文件。
相關問題
- 1. GCC未定義符號
- 2. 排除故障system.io.fileloadexception
- 3. IPC故障排除
- 4. Shadowbox故障排除
- 5. 故障排除WPF
- 6. 故障排除「TemplateDoesNotExist在/帳號/登錄/」
- 7. 編寫自定義過濾器的一些故障排除
- 8. gcc:允許未定義的符號
- 9. MouseListener的故障排除
- 10. 的sitemesh排除故障
- 11. 不是一個真正的技術故障
- 12. 排除反向字符串故障
- 13. 用於排除意外的mysql查詢故障的技巧
- 14. PhpStorm:導航到類文件或符號故障排除
- 15. 故障排除LI元件
- 16. Linux - 故障排除網頁
- 17. 故障排除ORA-00942
- 18. 故障排除CSS background-image
- 19. 故障排除.HTM文件
- 20. 故障排除PG功能
- 21. Drupal慢速故障排除
- 22. XPath和PHP故障排除
- 23. 國際化故障排除
- 24. 故障排除CSS佈局
- 25. Hello World MVC6故障排除
- 26. 故障排除從schema.yml中
- 27. autohotkey「發送」故障排除
- 28. 故障排除DataNucleus將JDO
- 29. 非root linux故障排除
- 30. css浮動故障排除
我在詞典中查找單詞「符號」......(對不起,它已經晚了......) – dappawit 2011-03-11 06:57:30