본문 바로가기

IT/C|C++

[Linux][Raspberry Pi 3][eclipse][C++] If can't not compile Thread code in eclipse // 리눅스 이클립스 환경에서Thread 코드가 컴파일 안될때,

I use c++ eclipse in Raspberry pi 3

when i try make some code about thread

i can't compile that. it's doesn't work 

finally i find solution


1. Go to Project Properties -> C/C++ Build -> Settings -> Linker

2. Add Libraries(-l), just typing "pthread"

3. Click the OK button

4. Compile again


라즈베리파이에서 C++ 이클립스를 사용하고 있다.

쓰레드를 쓸 일이 생겨서 사용하려고 하는데, 컴파일이 되지 않았다.

여러가지 방법을 찾아봤지만,

 C11에서 사용할 수 있다는 thread.h파일은 안되는 것 같았다.

std::thread가 std의 멤버가 아닌 것으로 보아, 

라즈베리파이에서 제공되는 C++는 thread.h파일을 이용할 수 없는 것 같다.

따라서 <pthread.h>를 사용하였는데, 코드에는 에러가 뜨지 않지만

컴파일만 하면 알 수 없는 컴파일 에러가 떴다.

해결 방법은 다음과 같다.


1. 해당 프로젝트파일의 Properties -> C/C++ Build -> Setting -> Linker ->     Libraries로 들어간다.

2. Libraries(-l)에 "pthread"를 추가한다.

3. 다시 컴파일을 시도해 본다.





스레드를 확인해볼 예제 파일은 다음과 같다.

튜토리얼은 다음 사이트를 참조하였다. 

http://www.tutorialspoint.com/cplusplus/cpp_multithreading.htm


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <cstdlib>
#include <pthread.h>
 
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, (void *)i);
      if (rc){
         cout << "Error:unable to create thread," << rc << endl;
         exit(-1);
      }
   }
   pthread_exit(NULL);
}
 
cs