g ++ — пример компиляции c ++ std :: thread с помощью scons

Я не могу заставить scons правильно скомпилировать небольшой пример потоков (в Linux).

Если я запускаю scons, он делает это:

jarrett@jarrett-laptop:~/projects/c++_threads$ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o build/main.o -c -std=c++11 -pthread -Wall -g src/main.cpp
g++ -o build/c++threads build/main.o
scons: done building targets.

тогда, если я бегу ./build/c++threads выдает эту ошибку:

terminate called after throwing an instance of 'std::system_error'
what():  Operation not permitted
Aborted

Если я скомпилирую из командной строки с этим:

g++ -std=c++11 -pthread -Wall -g src/main.cpp

это компилируется в a.outи если я бегу a.out он запускает программу (выводит данные для потоков и т. д.).

Вот мой файл SConstruct:

# Tell SCons to create our build files in the 'build' directory
VariantDir('build', 'src', duplicate=0)

# Set our source files
source_files = Glob('build/*.cpp', 'build/*.h')

# Set our required libraries
libraries = []
library_paths = ''

env = Environment()

# Set our g++ compiler flags
env.Append( CPPFLAGS=['-std=c++11', '-pthread', '-Wall', '-g'] )

# Tell SCons the program to build
env.Program('build/c++threads', source_files, LIBS = libraries, LIBPATH = library_paths)

и вот файл cpp:

#include <iostream>
#include <thread>
#include <vector>

//This function will be called from a thread

void func(int tid) {
std::cout << "Launched by thread " << tid << std::endl;
}

int main() {
std::vector<std::thread> th;

int nr_threads = 10;

//Launch a group of threads
for (int i = 0; i < nr_threads; ++i) {
th.push_back(std::thread(func,i));
}

//Join the threads with the main thread
for(auto &t : th){
t.join();
}

return 0;
}

Кто-нибудь есть идеи, что я делаю не так ???

Цени любую помощь!

ура

Джарретт

6

Решение

Спасибо @Joachim и @bamboon за комментарии. Добавление pthread к компоновщику (библиотека scons) работало.

Новый файл scons теперь:

# Tell SCons to create our build files in the 'build' directory
VariantDir('build', 'src', duplicate=0)

# Set our source files
source_files = Glob('build/*.cpp', 'build/*.h')

# Set our required libraries
libraries = ['pthread']
library_paths = ''

env = Environment()

# Set our g++ compiler flags
env.Append( CPPFLAGS=['-std=c++11', '-pthread', '-Wall', '-g'] )

# Tell SCons the program to build
env.Program('build/c++threads', source_files, LIBS = libraries, LIBPATH = library_paths)

Еще раз спасибо!

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]