编译代码时如何避免生成BINARY文件?
嘿,这个问题我碰到过好多次啦——毕竟有时候我们只需要编译出中间的目标文件,不想直接生成那个让编辑器头疼的可执行二进制文件对吧?
首先得搞清楚根源:默认情况下,像g++ HelloWorld.cpp这样的命令会同时完成编译和链接两个步骤,最后生成默认名为a.out(或者你用-o指定的名字)的可执行二进制文件。要避免生成它,只要让编译器停在编译阶段,不执行链接操作就行。
下面是几种实用的方法:
1. 用
-c选项(最通用) 这是GCC、G++、Clang这类主流编译器都支持的核心选项,作用就是只编译源文件,生成对应的目标文件(.o后缀),完全跳过链接步骤。
比如编译你的HelloWorld.cpp:
g++ -c HelloWorld.cpp
执行完后,你会得到HelloWorld.o文件——它虽然也是二进制,但只是未链接的中间文件,很多编辑器能识别它的结构(至少比纯可执行文件友好),而且它不是可以直接运行的程序。
2. 自定义目标文件名(配合
-o) 如果你不想用默认的HelloWorld.o名字,可以把-c和-o结合起来:
g++ -c HelloWorld.cpp -o my_hello.o
这样就会生成名为my_hello.o的目标文件,灵活度更高。
3. Windows下用MSVC编译器的情况
如果你在Windows上用微软的MSVC编译器,对应的选项是/c,用法类似:
cl /c HelloWorld.cpp
执行后会生成HelloWorld.obj目标文件,不会产生.exe可执行文件。
小补充:为什么目标文件相对友好?
目标文件里包含编译后的机器码,但还保留了函数名、变量名这类符号信息,有些编辑器可以解析这些内容;而完全链接后的可执行文件,如果开启了优化(比如-s选项),符号信息会被剥离,就只剩纯机器码了,编辑器自然完全无法识别。
内容的提问来源于stack exchange,提问作者DevDH
相关产品推荐
相关产品推荐

