用g ++编译multithreading代码
我有最简单的代码:
#include <iostream> #include <thread> void worker() { std::cout << "another thread"; } int main() { std::thread t(worker); std::cout << "main thread" << std::endl; t.join(); return 0; }
尽pipe我仍然不能用g++
编译运行。
更多细节:
$ g++ --version g++ (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
编译命令:
$ g++ main.cpp -o main.out -pthread -std=c++11
运行:
$ ./main.out terminate called after throwing an instance of 'std::system_error' what(): Enable multithreading to use std::thread: Operation not permitted Aborted (core dumped)
而现在我陷入了困境。 在互联网上的每一个相关的线程,build议添加-pthread
而我已经有了。
我究竟做错了什么?
PS:这是一个全新的Ubuntu 13.10安装。 只有g++
软件包被安装,并且还有一些小东西,如chromium
等等
PPS:
$ ldd ./a.out linux-vdso.so.1 => (0x00007fff29fc1000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fb85397d000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb853767000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb85339e000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb85309a000) /lib64/ld-linux-x86-64.so.2 (0x00007fb853c96000)
PPPS:与clang++
(V3.2)它编译和运行良好
PPPPS:家伙,这不是重复什么是在Linux下的GCC使用std ::线程的正确链接选项?
PPPPPS:
$ dpkg --get-selections | grep 'libc.*dev' libc-dev-bin install libc6-dev:amd64 install libclang-common-dev install linux-libc-dev:amd64 install
答案是由一个SO C ++聊天类成员提供的。
看起来这个行为是由gcc中的一个bug造成的。
该错误讨论的最后评论中提供的解决方法可以解决问题:
-Wl,--no-as-needed
添加-lpthread
为我解决了相同的问题:
g++ -std=c++11 foo.cpp -lpthread -o foo
答案已经为qtcreator做了:
LIBS += -pthread QMAKE_CXXFLAGS += -pthread QMAKE_CXXFLAGS += -std=c++11
对于控制台g ++: 这里
g++ -c main.cpp -pthread -std=c++11 // generate target object file g++ main.o -o main.out -pthread -std=c++11 // link to target binary
我有稍微更高级的版本(4.8.4而不是4.8.1),我testing了上面的所有三个答案。 事实上:
单独的工作:
g ++ -std = c ++ 11 -o main -pthread main.cpp
-Wl,--no-as-needed
单独不需要的不起作用 。
单独的-lpthread
不起作用 。
-Wl,--no-as-needed
和-lpthread
一起工作:
g ++ -std = c ++ 11 -o main -Wl, – 不需要main.cpp -lpthread
我的版本是“g ++(Ubuntu 4.8.4-2ubuntu1〜14.04.1)4.8.4”。
- 在C#中创build单个项目列表的快捷方式
- 为什么我的C#数组在input对象时会丢失types符号信息?
- 错误LNK2038:检测到“_MSC_VER”不匹配:值“1600”与CppFile1.obj中的值“1700”不匹配
- 从using()语句中返回是否有任何副作用?
- Ctrl + R,Ctrl + R命令不起作用
- 无法让sql server compact 3.5 / 4与ASP .NET MVC 2一起工作
- 什么是一个std :: map扩展初始化列表看起来像?
- 关于C#协方差的问题
- System.Web.Caching或System.Runtime.Caching是.NET 4 Web应用程序的首选