私は https://computing.llnl.gov/tutorials/pthreads/ からウェブから以下のデモを拾いました。
#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 5
void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
printf("Hello World! It's me, thread #%ld!\n", tid);
pthread_exit(NULL);
}
int main (int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc;
long t;
for(t=0; t<NUM_THREADS; t++){
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
pthread_exit(NULL);
}
しかし、私が自分のマシンでそれをコンパイルすると(Ubuntu Linux 9.04を実行しているとき)、私は以下のエラーを受け取ります。
corey@ubuntu:~/demo$ gcc -o term term.c
term.c: In function ‘main’:
term.c:23: warning: incompatible implicit declaration of built-in function ‘exit’
/tmp/cc8BMzwx.o: In function `main':
term.c:(.text+0x82): undefined reference to `pthread_create'
collect2: ld returned 1 exit status
ヘッダーにpthread.h
関数が含まれるはずのpthread_create
が含まれるため、これは私には意味がありません。何がうまくいかないのですか?
この質問に対する両方の答えはこれまでのところ 不正確 です。
Linuxの場合、正しいコマンドは次のとおりです。
gcc -pthread -o term term.c
一般に、ライブラリはコマンドラインでソースとオブジェクトをたどるべきです、そして-lpthread
は「オプション」ではありません、それはライブラリ仕様です。 libpthread.a
だけがインストールされているシステムでは、
gcc -lpthread ...
リンクに失敗します。
eclipseで
プロパティ - > c/c ++ビルド - >設定 - > GCC C++リンカ - >上部のライブラリに "pthread"を追加
実際には、次のチュートリアルを読み続けると、pthreadsコードに使用されるコンパイルコマンドのいくつかの例が以下の表に一覧表示されます。
Linux端末から実行して、私のために働いたのは以下のコマンドを使用してコンパイルしていました(私がコンパイルしたいcファイルがtest.cと呼ばれると仮定します):
gcc -o test test.c -pthread
誰かに役立つことを願っています!
このようにコンパイルしてください。gcc demo.c -o demo -pthread
Gccと一緒にオプション-lpthread
を使う必要があります。
Cmakeを使用している場合は、次のものを使用できます。
add_compile_options(-pthread)
または
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
必要なのはproproieties => C/C++ build => GCC C++ Linker => Libraries =>上部のLibraries(-l)に "pthread"を追加するだけです。それでおしまい
Linuxの場合、正しいコマンドは次のとおりです。
gcc -o term term.c -lpthread
コンパイルコマンドの直後に-lpthreadを指定する必要があります。このコマンドは、pthread.hでプログラムを実行するようにコンパイラに指示します。library.gcc -lライブラリファイルとリンクします。
Anjutaで、[ビルド]メニューの[プロジェクトの構成]をクリックします。 [オプションの設定]ボックスに次の行を追加します。
LDFLAGS='-lpthread'
それが誰かにも役立つことを願っています...
複数のライブラリを使用している場合は、ライブラリの依存関係を確認してください。 (例:-lpthread -lSDL ... <==> ... -lSDL -lpthread)
manページを確認してください。
コンパイルして-pthreadでリンクします。
SYNOPSIS
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
Compile and link with -pthread.
....
Visual Studio 2019では、次のプロジェクトのプロパティページで-pthread
を指定します。
リンカ - >コマンドライン - >追加オプション
テキストボックスに-pthread
と入力します。
pthread
にCMake
を追加する適切な方法は、次のとおりです。
find_package (Threads REQUIRED)
target_link_libraries(helloworld
${CMAKE_THREAD_LIBS_INIT}
)