簡體   English   中英

C ++程序,用g ++編譯

[英]C++ programs, compiling with g++

我非常清楚在linux環境下使用g ++編譯C ++程序。 但是,可能是我錯過了一些東西,我得到了這種奇怪的輸出/行為。

我在test.cpp中有源文件。 為了編譯這個,我做到了

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

一切正常。 但是,當我在同一階段進行編譯和鏈接時,就像這樣

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

在我的最后一種情況下,測試生成但不再可執行; 但在我的猜測它應該工作正常。 那么,有什么不對或我需要更改一些設置/配置?

我正在使用g ++ 4.3.3

謝謝。

當你說:

g++ -c test.cpp -o test

-c標志禁止鏈接,因此不會生成可執行文件 - 您正在重命名.o文件。

基本上,不要這樣做。

您正在強制編譯器生成目標文件並將其命名為可執行文件。

基本上你的最后一行告訴:將其編譯為目標文件,但將其命名為test,而不是test.obj。

-c標志表示僅編譯

試試g ++ -o test 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. 

您必須鏈接編譯的目標文件以獲取可執行文件。 有關編譯和鏈接的更多信息和內容在這里

閱讀man g ++。 交換機-c只是編譯而不是鏈接。 g ++ -c test.cpp -o test執行g ++ -c test.cpp的功能,但是目標文件將被測試,而不是默認名稱test.o. 無法執行目標文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM