我有一个简单的例子来测试我的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?
提前致谢,
答案 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
谢谢大家。