使用-c编译c ++

时间:2014-04-20 16:03:18

标签: c++ compilation codeblocks

我有一个简单的例子来测试我的IDE,为我的C ++环境做好准备。 我目前在Ubuntu 14.04中使用Codeblocks 13.12。

当我构建程序时,编译器会执行以下代码,程序在运行时会抛出错误。

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   

ERROR:

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?

提前致谢,

2 个答案:

答案 0 :(得分: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标志告诉编译器将调试信息包含在生成的目标文件中。

答案 1 :(得分: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

谢谢大家。