为了账号安全,请及时绑定邮箱和手机立即绑定

用G ++编译多线程代码

用G ++编译多线程代码

缥缈止盈 2019-11-30 13:25:00
我有史以来最简单的代码:#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;}尽管我仍然无法编译g++运行它。更多细节:$ g++ --versiong++ (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1Copyright (C) 2013 Free Software Foundation, Inc.This is free software; see the source for copying conditions.  There is NOwarranty; 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 permittedAborted (core dumped)现在我陷入困境。在互联网上的每个相关线程中,建议在-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 :: thread的正确链接选项是什么的重复项?PPPPPS:$ dpkg --get-selections | grep 'libc.*dev'libc-dev-bin                    installlibc6-dev:amd64                 installlibclang-common-dev             installlinux-libc-dev:amd64                install
查看完整描述

3 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

答案是由SO C ++聊天的一位好心人提供的。


看来此行为是由gcc中的错误引起的。


该错误讨论的最后评论中提供的解决方法确实可以解决该问题:


-Wl,--no-as-needed


查看完整回答
反对 回复 2019-11-30
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

我有更高级的版本(4.8.4而不是4.8.1),并且我测试了以上所有三个答案。事实上:


-pthread 单独工作:


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”。


查看完整回答
反对 回复 2019-11-30
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

已经为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


查看完整回答
反对 回复 2019-11-30
  • 3 回答
  • 0 关注
  • 697 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信