有没有办法为.obj文件生成C++头文件?或者也许有一个实用程序可以查看.obj文件。我已经找到了在各种格式之间转换的objconv,但我找不到任何.h生成器/查看器。生成视图.obj文件的标头
回答
鉴于C++标记,情况并不像其他答案暗示的那样绝望。
特别是,至少在大多数C++编译器中,函数的名称会被损坏(Microsoft称之为“装饰”),以指示该函数所采用的参数。编译方案因编译器而异,但实际上它们中的任何一个都编码足够的信息,以便为函数重新创建声明 - 返回类型,函数本身的名称,类名称(如果它是成员函数) ,以及函数期望的参数的确切数量和类型。
尽管不必通过重写名称来完成,但C++系统没有真正的选择,只能将参数信息包含在目标文件中。当你重载函数时,链接器需要一些方法来确定哪个超载与特定的调用相关联。
我要补充一点,整理出这一切可能是相当多的工作中,虽然 - 只是举例,如果代码包括模板,在目标文件中的符号名称将拓展出所有模板参数(包括默认参数)。只是举例,考虑代码琐碎有点像这样:
#include <vector>
#include <string>
std::vector<std::string> x;
当我编译这个用VC++,然后做dumpbin /symbols foo.obj
,产量约为75千字节。尽管我的源代码似乎只定义了一个符号,但目标文件包含大约180个符号的定义,其中很多与我写的任何东西几乎完全无关。
还值得一提的是,如果目标文件是用调试信息编译的,那么(通常)也会在目标文件中产生更多的类型信息(以及其他)。
不能有一个标题生成器,因为.obj文件不包含头文件中所需的所有信息。至于转储.obj,用于执行该操作的工具将依赖于编译器。与GCC相关的工具是objdump。
你的问题被标记为visual-c++
所以我假设你在Windows上。
从目标文件中生成原始的头文件是不可能的,因为在将源代码编译成目标文件时,会丢弃头文件中很多(可以说是大部分)信息。
但是,您可以使用dumpbin
实用程序检查极低级别的目标文件。对象文件中存在的唯一信息可能对您很有意思,它是在给定对象文件中定义的符号名称列表。尽管如此,您仍然无法从对象文件中获取任何类型的信息。所以你不能说出给定的函数使用或期望什么类型的值。
在某些情况下(当所有的参数都通过堆栈传递给函数),你可能知道的一个功能预计参数的数量(通过拆卸功能代码的开始和计数多少值从弹出堆栈)。但绝大多数情况下这都不起作用。
- 1. 从目标文件生成头文件
- 2. 当Visual Studio生成32位.obj文件和64位.obj文件?
- 3. 探索由VC++生成的.obj文件
- 4. 什么是obj文件夹生成?
- 5. 如何为新视图自动生成实现和头文件?
- 6. JNI头文件生成类
- 7. Drupal视图:生成xml文件
- 8. Obj-C++头文件中的AppKit对象?
- 9. Qt Vs addin - .obj文件不生成moc _ *。cpp文件
- 10. C库,生成文件头的依赖
- 11. 生成java头文件的错误
- 12. 使用Cython生成的头文件
- 13. 在MIDL生成的头文件
- 14. 生成Java头文件中的错误
- 15. 更改IDL生成的头文件
- 16. HTTP:生成ETag标头
- 17. 如何生成带有适当CGI标头的XML文件?
- 18. qmake:将uic生成的头文件添加到安装目标
- 19. 生成有效的ETAG文件流并与标头比较
- 20. 麻烦为JNI生成头文件
- 21. 如何自动生成C++头文件
- 22. 在MVC中生成SOAP头文件C#
- 23. 使用TFS生成版本头文件
- 24. 在Twisted客户端生成头文件
- 25. 从C++头文件生成Java接口
- 26. 生成JNI头文件时出错
- 27. Bazel头文件代码生成器
- 28. 从头自动生成C++文件?
- 29. pvrtextool cl不生成标准标头
- 30. 用空文件生成头文件和尾部文件
我不想恢复原始标题。我只是想创建一个基于可以从.obj文件读取的信息。特别是我想生成函数签名(返回值,函数名称,参数)。 dumpbin能做到吗? – 2010-03-31 14:14:00
@AOI Karasu:我更新了回复以回答dumpbin是否可以这样做的问题。 – 2010-03-31 15:57:30