2013-04-04 95 views
0

C++ Lib Files是二進制文件還是隻是某種容器,就像一個zip文件,它包含所有的二進制文件?您可以從C++ Lib文件中獲取信息,例如如何從Jar文件中獲取信息?

我問,因爲我很好奇,如果我可以打開一個庫文件(.lib)來獲取關於它裏面的文件的更多信息,類似於如何打開一個jar文件並在人類可讀的方式。

我問,因爲我添加一些庫到我的lib路徑,並希望知道如果lib文件包含我試圖引用的類。

+0

我提到了C++ Libs,但libs也可能是由delphi製作的。 – 2013-04-04 17:18:25

+1

沒有庫文件不能像Java中的包一樣工作。它們是二進制的,沒有容器,也不包含文件。您可以從中獲取信息,例如使用正確的工具導出哪些功能和符號。德爾福也一樣。 – pag3faul7 2013-04-04 17:22:28

+1

總是有'nm'和''C++ filt'告訴你一個庫定義了哪些符號。但是,不,在C++庫中沒有真正的源信息。 – 2013-04-04 17:23:30

回答

1

據我所知,庫文件是純二進制文件。所以不可能真正「看」它的內容就像一個zip文件。

如果您掌握了一些.lib文件,那麼它很可能還附帶了解釋其功能的文檔。這將是一個很好的檢查你的課程是否存在於圖書館的地方。

編輯:This question描述了一個叫做dumpbin的lib文件檢查器,可能是你需要的。

+0

我會假設有一些方法來「看」它裏面有什麼,因爲程序能夠正確地引用這些lib文件嗎? – 2013-04-04 17:28:21

+1

我認爲你會發現在下面的問題的解決方案有用。它描述了一個名爲dumpbin的lib文件檢查器。不確定這是你的期望,但檢查出來。 [這裏](http://stackoverflow.com/questions/2188490/static-library-inspector-for-windows) – stevedes 2013-04-04 17:32:28

+0

謝謝史蒂夫。如果您編輯您的答案以包含額外信息,我會接受您的答案。它足夠讓我可以開始使用Google。 – 2013-04-04 17:42:55

0

一個lib文件包含庫提供的所有編譯單元的編譯二進制文件。既然你已經標記了C++ Builder,我假設你有OMF -libraries。您可以很容易地從這些信息中獲取大量信息,例如庫中的所有功能簽名。

C++ Builder附帶了一個名爲TDump的工具,該工具以人可讀形式打印庫的內容。它位於C++ Builder安裝目錄下的bin目錄中。

下面的例子說明如何使用TDUMP在命令行轉儲庫的內容:

"C:\Program Files\Embarcadero\RAD Studio\10.0\bin\tdump.exe" library.lib > library-dump.txt 

您可以通過搜索輸出「THEADR」發現庫中的每個對象模塊。在THEADR行之後,您將獲得編譯對象時使用的所有依賴文件(基本上包括)的列表。在依賴之後有符號,包括demangled函數簽名。

+0

我現在沒有TDump或OMF庫,但是如果需要,我可以在下週開始工作時向您提供有關如何解釋輸出的更多信息。 – 2013-04-05 19:38:36