2014-04-20 89 views
0

我有一個簡單的例子來測試我的IDE,準備好我的C++環境。 我目前在Ubuntu 14.04中使用Codeblocks 13.12。編譯C++使用-c

當我構建我的程序時,編譯器執行下面的代碼,並且程序在運行時會引發錯誤。

g++-4.8 -Wall -fexceptions -O3 -pedantic-errors -std=c++11 -Wextra -Wall -pthread -c /home/mikeldi/workspace/codeblocks/main.cpp -o obj/Debug/main.o 
g++-4.8 -o bin/Debug/test obj/Debug/main.o 

錯誤:

terminate called after throwing an instance of 'std::system_error' 
what(): Unknown error -1 
Aborted (core dumped) 

在另一方面,如果我執行以下行(請注意,我不main.cpp中前使用-c)程序將沒有任何問題執行。

g++-4.8 -Wall -fexceptions -O3 -pedantic-errors -std=c++11 -Wextra -Wall -pthread main.cpp -o main 

所以,我的問題是: 什麼是-c做,使程序無法正常工作? 是否有任何設置codeBlocks的方式,因此它不使用-c?

由於提前,

+0

命令行中還有很多其他的區別,這些區別更可能是您的問題的競爭者 - 例如,在沒有工作的人中,你壓倒了體系結構(-march)。 '-c'不是你的問題;它只是將編譯和鏈接分成兩個獨立的步驟。 –

+0

你已經沉迷於一個特定的國旗,然後決定,必須避免標誌__。相反,你需要它,它可能與這個問題無關。用你在這裏給我們看的_minimal testcase_重現問題。 –

+0

更有可能的事實是,一個人有'-fexceptions',另一個沒有,特別是因爲崩潰信息涉及異常(或者說Alan覆蓋的拱門覆蓋)。 – PeterT

回答

0

由於PeterT中的評論稱,編譯器和鏈接器需要-pthread 一旦解決,該程序工作得很好:

g++-4.8 -Wall -fexceptions -O3 -pedantic-errors -std=c++11 -Wextra -Wall -pthread -c /home/mikeldi/workspace/codeblocks/main.cpp -o obj/Debug/main.o 
g++-4.8 -o bin/Debug/test obj/Debug/main.o -pthread 

謝謝大家。

0

如果你的程序拋出在運行時出現錯誤,問題是更可能是在你的代碼比您正在使用的編譯器開關。據說,這兩個編譯器調用之間的差異比-c多得多。特別是,差異

-fexceptions -march=corei7 -g 

如果您添加這些編譯切換到您的命令行調用,與

g++-4.8 -fexceptions -march=corei7 -g -O3 -pedantic-errors -std=c++11 
    -Wextra -Wall -pthread main.cpp -o main 

,你可以重新編譯代碼,並認爲它可能仍然崩潰。由於-g標誌告訴編譯器將調試信息包含到生成的目標文件中,因此可以使用所選的調試程序逐步查找代碼。