2009-07-24 85 views
4

我非常清楚在linux环境下用g ++编译C++程序。但是,可能是我错过了一些东西,我正在得到这种奇怪的输出/行为。用g ++编译的C++程序

我在test.cpp中有源文件。 若要编译此,我做了

 
(1) 
g++ -c test.cpp 
g++ -o test test.o 
./test 

,一切工作正常。 但是,当我做compling和同台的连接,这样

 
(2) 
g++ test.cpp -o test 
./test => Works fine 
(3) 
g++ -c test.cpp -o test => Doesn't work 

我在去年的情况下,生成的测试,但没有更多的可执行文件;但在我的猜测,它应该工作得很好。 那么,什么是错的或我需要改变一些设置/配置?

我正在使用g ++ 4.3.3

谢谢。

+0

明白了,感谢所有:) – 2009-07-24 14:16:43

回答

12

当你说:

g++ -c test.cpp -o test 

-c标志抑制连接,所以没有可执行的产生 - 要重命名的.o文件将。

基本上,不要这样做。

3

您正在强制编译器生成目标文件并将其命名为可执行文件。

本质上,你的最后一行告诉:编译这个对象文件,但将其命名为test,而不是test.obj。

2

在g ++命令行指定-o告诉编译器给出输出文件的名称。当您尝试在一行中完成所有操作时,您只是告诉编译器将test.cpp编译为名为test的目标文件,并且没有完成链接。

看看神话般的online manual for GCC了解更多详情。

3

-c标志是指只编译

尝试 G ++ -o测试TEST.CPP

1

从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

1

阅读man g ++。开关-c只能编译但不能链接。 g ++ -c test.cpp -o test 做什么 g ++ -c test.cpp 不过,对象文件将被测试,而不是默认名称test.o.目标文件无法执行。