2013-04-04 110 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