我非常了解在linux环境下用g++编译C++程序。但是,也许我错过了一些东西,我得到了这种奇怪的输出/行为。
我在test.cpp中有源文件。 为了编译这个,我做了
(1) g++-c测试.cpp g++ -o 测试 test.o 。/测试
一切正常。 但是当我在同一阶段进行编译和链接时,就像这样
(2) g++ test.cpp -o 测试 ./test => 工作正常 (3) g++ -c test.cpp -o test => 不起作用
在我的最后一个例子中,测试已生成,但不再可执行;但在我看来它应该工作得很好。 那么,出了什么问题或者我需要更改一些设置/配置吗?
我正在使用 g++ 4.3.3
当你说:
g++ -c test.cpp -o test
-c 标志禁止链接,因此不会生成可执行文件 - 您正在重命名 .o 文件。
基本上,不要这样做。
您正在强制编译器生成目标文件并将其命名为可执行文件。
最后一行基本上告诉我们:将其编译为目标文件,但将其命名为 test,而不是 test.obj。
-c 标志表示仅编译
尝试 g++ -o 测试 test.cpp
在 g++ 命令行中指定
-o
告诉编译器为输出文件指定什么名称。当您尝试在一行中完成所有操作时,您只是告诉编译器将 test.cpp
编译为名为 test
的目标文件,并且没有完成链接。
查看精彩的GCC 在线手册了解更多详细信息。
来自 gcc 手册:
-c Compile or assemble the source files, but do not link. The linking stage simply is not done. The ultimate output is in the form of an object file for each source file.
您必须链接编译后的目标文件才能获取可执行文件。 有关编译和链接等内容的更多信息是here。
阅读 man g++。开关 -c 仅编译但不链接。 g++ -c test.cpp -o 测试 做什么 g++-c测试.cpp 确实如此,但目标文件将被测试,而不是默认名称 test.o。无法执行目标文件。