如何指定Visual Studio将C源文件编译为PE目标文件而非COFF?
能否用Visual Studio将C源文件编译为PE格式目标文件?
先说明白:Visual Studio配套的MSVC编译器,默认生成的目标文件是COFF格式,没办法直接指定编译生成PE格式的目标文件。
这是因为PE格式本质是给.exe、.dll这类完整可执行镜像设计的,而目标文件(.obj)的作用是为后续链接阶段提供未完成的代码、数据片段,COFF格式专门适配了这个场景——它包含重定位信息、符号表等链接必需的元数据,PE格式并不具备这些用于链接的结构,没法承担目标文件的角色。
不过要是你确实需要PE格式的文件,倒是能通过间接方式实现:
- 最标准的方式:先编译生成COFF格式的.obj文件,再通过链接器生成PE格式的.exe或.dll文件,这本来就是正常的编译流程。
- 特殊需求场景:如果非要得到一个类似目标文件(包含未解析符号)的PE文件,可以用链接器的
/NOENTRY和/DLL参数生成一个空DLL,再借助工具将.obj的内容嵌入进去,但这并非标准用法,会带来不少兼容性问题。
总的来说,MSVC没有直接生成PE格式目标文件的选项,毕竟目标文件和PE可执行文件的设计定位完全不同,COFF才是MSVC生态里标准的目标文件格式。
内容的提问来源于stack exchange,提问作者roeegg
相关产品推荐
相关产品推荐

