Прежде всего, я уже проверил различные решения:Настройка затмить с C++ 11
Compile multithreading with gcc
Моя среда:
Ubuntu 1404 64бит
GCC 4.8.2
Eclipse IDE для C/C++ Developers
Версия: Luna Service Release 1 (4.4.1) Сложение ID: 20140925-1800
После этих ссылок мне удалось скомпилировать и запустить базовую программу потоков (код был взят из одной из ссылок в SO, но не может найти ее снова. Если кто-то видит это, отредактируйте мой вопрос, чтобы добавить ссылку).
#include <iostream>
#include <thread>
#include <vector>
void func(int tid)
{
std::cout << "Launched by thread " << tid << std::endl;
}
int main()
{
std::vector<std::thread> th;
int nr_threads = 10;
for(int i = 0; i < nr_threads; ++i)
{
th.push_back(std::thread(func, i));
}
for(auto &t : th)
{
t.join();
}
return 0;
}
Команда Я использую, чтобы скомпилировать следующий (ЭТО РАБОТАЕТ и выходной файл является исполняемым):
g++ --std=c++11 -pthread test.cpp -o test.out
Launched by thread 1
Launched by thread 5
Launched by thread 3
Launched by thread 6
Launched by thread 4
Launched by thread 0
Launched by thread 7
Launched by thread 8
Launched by thread 9
Launched by thread 2
Проблема заключается в том, когда я пытаюсь настроить мой проект затмения. Я могу скомпилировать, но он не может создать допустимый выходной файл.
Compile журнал:
12:09:45 **** Incremental Build of configuration Debug for project test ****
make all
Building file: ../test.cpp
Invoking: GCC C++ Compiler
g++ --std=c++11 -pthread -D__cplusplus=201103L -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"test.d" -MT"test.d" -o "test.o" "../test.cpp"
Finished building: ../test.cpp
Building target: test
Invoking: GCC C++ Linker
g++ -o "test" ./test.o
Finished building target: test
12:09:46 Build Finished (took 780ms)
Я меняла различных настроек для строителя, диалекты ... как говорится в ссылках, пытающихся получить ту же команду, что я могу использовать для компиляции из терминала. Но нет способа создать допустимый выходной файл из eclipse. Он всегда показывает эту ошибку:
terminate called after throwing an instance of 'std::system_error' what(): Enable multithreading to use std::thread: Operation not permitted
Любая идея, как настроить Eclipse?
Update: После показаний @Dirk я испытанные в виртуальной машине, и она работает просто добавляя PTHREAD к библиотекам компоновщика.
Но для моей первоначальной настройки все еще не удается. Я сделал это, работая после изменения настроек компоновки C/C++ Build G ++ для g++ --std=c++0x -pthread
Итак, кажется очевидным, что в моей первой среде чего-то не хватает.
Как вы выполняете связывание в своей работе пример? Похоже, eclipse настроен на использование -pthread для компиляции, но не для привязки. – Dirk
Я ничего не менял в настройках компоновщика g ++. Когда я добавил флаг -pthread, он выдает: make: *** Нет правила для создания target -pthread, необходимого для теста. Стоп. 'При построении – blfuentes
Просто добавьте pthread под параметры библиотеки настроек компоновщика. – Dirk