C++ のスレッドに関するチュートリアルを読んで、次のコードをテストしました。
#include <iostream>
#include <pthread.h>
#include <cstdlib>
using namespace std;
#define NUM_THREADS 5
void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
cout << "Hello World! Thread ID, " << tid << endl;
pthread_exit(NULL);
}
int main ()
{
pthread_t threads[NUM_THREADS];
int rc;
int i;
for( i=0; i < NUM_THREADS; i++ ){
cout << "main() : creating thread, " << i << endl;
rc = pthread_create(&threads[i], NULL,
PrintHello, &threads[i]);
if (rc){
cout << "Error:unable to create thread," << rc << endl;
exit(-1);
}
}
pthread_exit(NULL);
}
gcc と g++ の両方を使用してこのコードをコンパイルしようとしましたが、常にコンパイル エラーが発生します。
gcc -pthread thread_test.c を使用:
/tmp/ccmpQLyp.o: 関数内
PrintHello(void*)': thread_test.cpp:(.text+0x1a): undefined reference to
std::cout' thread_test.cpp:(.text+0x1f):std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)' thread_test.cpp:(.text+0x2e): undefined reference to
std::ostream::operator<<(long)' への未定義の参照 thread_test.cpp:(.text+0x33 ):std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)' thread_test.cpp:(.text+0x3b): undefined reference to
std::ostream::operator<<(std::ostream& (*)(std::ostream&))' への未定義の参照' /tmp/ccmpQLyp.o: 関数main': thread_test.cpp:(.text+0x63): undefined reference to
std::cout' thread_test.cpp:(. text+0x68):std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)' thread_test.cpp:(.text+0x75): undefined reference to
std::ostream::operator<<(int) への未定義の参照' thread_test.cpp:(.text+0x7a):std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)' thread_test.cpp:(.text+0x82): undefined reference to
std::ostream::operator<<(std::ostream& への未定義の参照) ( *)(std::ostream&))' thread_test.cpp:(.text+0xcc):std::cout' thread_test.cpp:(.text+0xd1): undefined reference to
std::basic_ostream への未定義参照 >& std::operator<< >(std::basic_ostream >&, char const*)' thread_test.cpp:(.text+0xde): への未定義の参照std::ostream::operator<<(int)' thread_test.cpp:(.text+0xe3): undefined reference to
std::basic_ostream >& std::endl >(std::basic_ostream >&)' thread_test.cpp:(.text+0xeb):std::ostream::operator<<(std::ostream& (*)(std::ostream&))' /tmp/ccmpQLyp.o: In function
__static_initialization_and_destruction_0(int, int) への未定義参照': thread_test.cpp:(.text+ 0x141):std::ios_base::Init::Init()' thread_test.cpp:(.text+0x150): undefined reference to
std::ios_base::Init::~Init()' への未定義の参照 /tmp/ccmpQLyp.o:(.eh_frame+0x47): `__gxx_personality_v0' への未定義の参照 collect2: エラー: ld が 1 つの終了ステータスを返しました
手伝ってくれますか?このコードを Linux と Windows で実行するために何かをしなければなりませんか?