首先的日食,我已經檢查不同的解決方案:配置與C++ 11
Compile multithreading with gcc
我的環境:
Ubuntu的1404 64bits的
GCC 4.8.2
的Eclipse IDE爲C/C++開發
版本:露娜服務版本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
問題是,當我嘗試設置我的eclipse項目。我可以編譯,但它不能產生有效的可運行輸出。
編譯日誌:
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
不知道如何設置偏食?
更新: 繼@Dirk我在虛擬機測試的適應症和它的作品只是增加了並行線程的連接庫。
但對於我的初始設置它仍然失敗。我修改C/C++構建設置G ++連接器命令後,它的工作原理爲g++ --std=c++0x -pthread
因此,看起來很明顯,我的第一個環境缺少一些東西。
如何在工作中執行鏈接示例?看起來像eclipse被配置爲使用-pthread進行編譯,但不用於鏈接。 – Dirk 2014-10-31 11:30:25
我沒有更改g ++鏈接器設置中的任何內容。當我添加標誌-pthread時,它會拋出make:***沒有規則來製作target -pthread,這是測試所需要的。停止.'建立時 – blfuentes 2014-10-31 11:33:49
只需在鏈接器設置的庫選項下添加pthread即可。 – Dirk 2014-10-31 11:44:48