2017-01-30 35 views
2

我知道怎麼看哪些庫有一定分量correponds使用命令:我在哪裏可以看到庫包含LLVM的哪些部分?

llvm-config --libs core 

現在,假設我得到一個鏈接錯誤,並希望包括另一個庫來解決它。

說,鏈接器無法解析某個符號A。那麼我如何:

1)找到包含特定符號的庫,例如, LLVMCore.lib。

2)查找庫的內容以查看它定義的符號?

我不明白如何閱讀文檔。

回答

2

正如你已經發現了一個適當的LLVM-辦法做到這一點會被指示組件使用llvm-config你打算鏈接或使用,例如

llvm-config --cxxflags --ldflags --system-libs --libs core 

其他常見非LLVM具體,你可以用它來找到一個符號的方法:在一個雙贏的平臺(使用VS自帶工具在cmd或同等環境設置一個):

for %f in (*.lib) do (dumpbin.exe /symbols %f | findstr /C:"your_symbol") 

,如果你無法處理findstr的限制GNU grep可能是更好的選擇。 如果您安裝的Unix工具,並在您PATH你也可以使用

for %f in (*.lib) do (nm -gC %f | findstr /C:"your_symbol") 

baddger964建議。

在UNIX系統:

for lib in $(find . -name \*.so) ; do nm -gC $lib | grep my_symbol | grep -v " U " ; done 

(搜索該目錄中*.somy_symbol;的extern-只,還原函數和排除未定義的符號)

鑑於上述問題2是微不足道的。

+0

感謝您的回答。你還可以提供用於在Linux上查找符號的'grep'命令嗎?這是LLVM程序員通常解析其符號的方式,即找到包含它的庫? – Shuzheng

+0

@Shuzheng編輯並添加更多信息 –

+0

謝謝你的回答。它是完整的和令人滿意的:-) 最後一個問題,你知道任何「組件」被定義的資源嗎?現在,我使用'llvm-config'來查看一個組件與哪個庫相關。然而,如果有一些資源說:「LLVM源代碼的這些部分被放到這個庫中」和「這個組件包含對應於這些源的這些部分的庫」,那將是很好的。這樣,如果我看到'someheader.hpp'中定義了一個符號,我可以立即找到相應的庫。 – Shuzheng

1

的一種方式,看看你的lib的符號是使用nm命令:

nm -gC mylib.so 
相關問題