2014-10-31 3 views
3

Прежде всего, я уже проверил различные решения:Настройка затмить с C++ 11

Threads std::system_error

Threads std::system_error II

Compile multithreading with gcc

Bug gcc multithreading

Моя среда:

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

Итак, кажется очевидным, что в моей первой среде чего-то не хватает.

+0

Как вы выполняете связывание в своей работе пример? Похоже, eclipse настроен на использование -pthread для компиляции, но не для привязки. – Dirk

+0

Я ничего не менял в настройках компоновщика g ++. Когда я добавил флаг -pthread, он выдает: make: *** Нет правила для создания target -pthread, необходимого для теста. Стоп. 'При построении – blfuentes

+0

Просто добавьте pthread под параметры библиотеки настроек компоновщика. – Dirk

ответ

1

Похоже, что ссылка на библиотеку pthread отсутствует. Добавьте «pthread» в разделе «Build-> Settings->« Настройки инструмента »-> GCC C++ Linker-> Libraries.

Это то, что говорит мой журнал сборки:

**** Build of configuration Debug for project testpthreads **** 

make all 
Building file: ../main.cpp 
Invoking: GCC C++ Compiler 
g++ -O0 -g3 -Wall -c -fmessage-length=0 --std=c++0x -pthread -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.cpp" 
Finished building: ../main.cpp 

Building target: testpthreads 
Invoking: GCC C++ Linker 
g++ -o "testpthreads" ./main.o -lpthread 
Finished building target: testpthreads 

Ваш код затем работает и выходы:

Launched by thread Launched by thread Launched by thread 1 
Launched by thread 0 
Launched by thread 2 
Launched by thread 9 
Launched by thread 3 
Launched by thread 7 
Launched by thread 6 
4 
Launched by thread 8 
5 

я получаю ту же ошибку, что и вы без -lpthread

Мои настройки компоновщика : linkersettings

+0

Как я ответил в вашем комментарии. все еще такая же ошибка, хотя компоновщик теперь проверяет -lpthread. – blfuentes

+0

Я еще раз проверю. Не могли бы вы опубликовать скриншот настроек компоновщика ?. – blfuentes

+0

Это может быть проблема с вашей конкретной настройкой :( – Dirk

Смежные вопросы