【问题标题】:Cannot compile C++17 in Debian Linux [duplicate]无法在 Debian Linux 中编译 C++17 [重复]
【发布时间】:2020-07-18 18:06:57
【问题描述】:

我有以下代码,可以在 Windows MinGW 中编译。

#include <future>
#include <iostream>
#include <string>
int main(){
    auto futureLambda= std::async([](const std::string& s ){return "Hello C++11 from " + s + ".";},"lambda function\n");
    std::cout << futureLambda.get() << std::endl;
}

当我尝试在 Linux(gcc 版本 8.3.0 (Debian 8.3.0-6))中使用

 g++ -std=c++1z main.cpp

 g++ -std=c++17 main.cpp

我明白了:

/usr/bin/ld: /tmp/cc4vI5fr.o: in function std::thread::thread<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<main::{lambda(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)#1}, char const*> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::_Async_state_impl(std::tuple<main::{lambda(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)#1}, char const*>&&)::{lambda()#1}, , void>(std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<main::{lambda(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)#1}, char const*> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::_Async_state_impl(std::tuple<main::{lambda(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)#1}, char const*>&&)::{lambda()#1}&&)':
main.cpp:(.text+0x1c72): undefined reference to 'pthread_create'
collect2: error: ld returned 1 exit status

我做错了什么?

【问题讨论】:

  • 使用 -pthread 给你 gcc 编译选项
  • 谢谢,确实做了谷歌搜索,但找不到这个。下次问之前会更努力的。

标签: c++ compiler-errors g++ c++17


【解决方案1】:

使用 std::thread 需要链接到任何 POSIX 系统(包括 Linux)上的 pthread 库。我认为对于 GCC,这只是将“-pthread”作为参数,而不是像其他库那样使用“-lpthread”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    相关资源
    最近更新 更多