-1

I have the following code, that I can compile in 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;
}

When I try to run it in Linux (gcc version 8.3.0 (Debian 8.3.0-6)) using

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

or

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

I get:

/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

What am I doing wrong?

genpfault
  • 51,148
  • 11
  • 85
  • 139
Jake B.
  • 435
  • 3
  • 13

1 Answers1

3

Using std::thread requires linking to the pthread library on any POSIX system (including Linux). I think with GCC this is just '-pthread' as an argument rather than '-lpthread' as with other libraries.