2017-10-03 24 views
0

外部ライブラリの使用をテストする簡単なプログラムを構築しようとしていますが、g ++とリンクする際に問題があります。コマンド/結果を参照してください:外部ライブラリへのg ++​​のリンクが未定義の参照を作成する

[email protected]:~/Desktop/WDT_DIO/linux/test$ g++ -o main main.o -lwdt_dio 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `sem_unlink' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `pthread_mutexattr_settype' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `sem_close' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `pthread_spin_lock' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `pthread_spin_unlock' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `pthread_create' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `pthread_spin_init' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `pthread_mutexattr_init' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `pthread_spin_destroy' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `sem_post' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `sem_open' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `sem_getvalue' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `sem_wait' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `pthread_join' 
collect2: error: ld returned 1 exit status 

OSの一部である基本ライブラリにリンクしていないようですね。

詳細:

gcc --version --> 5.4.0 20160609 
ldd --version --> 2.23 
OS   --> Ubuntu 16.04 x64, 4.8.0-36-generic kernel 
+0

[pthreadをC++で使用する](https://stackoverflow.com/q/2679885/608639)と[コンパイル/リンクエラー(pthreadを使用)](https://stackoverflow.com/q/6332410/) 608639) – jww

答えて

2

あなたはpthreadライブラリへのリンクが欠落しているように見えます。あなたのコンパイルコマンドに-pthreadを追加します。

g++ -o main main.o -pthread -lwdt_dio 

sem_wait(3)ショーのmanページをチェック:-pthreadと

リンク。

注:sem_waitがランダムに選択された、それらのすべては、あなたが密接にエラーを読めば、それは未定義のlibwdt_dio.soから来ているという

+0

あなたやPetarのコメントはまだ受け付けていませんが、正しいものでした。どのような図書館が見つからなかったのか、皆さんはどうでしたか? pthreadは明白でしたが、私はすぐにセマフォ関数が同じライブラリの一部であることを認識しませんでした – DrTarr

+0

@ NateGreco、私はこれらのメソッドに精通していますが、ちょうど私も簡単な説明を追加しました... –

+0

Perfect、thakns – DrTarr

1

ことを指定する必要があります。また、どの関数に未定義参照があるかを示します。

この場合、pthreadライブラリです。おそらく、WDTのlibドキュメントに依存していると言えるでしょう。

コマンドラインでコンパイルする場合は、g ++コマンドに-pthreadを追加できます。

関連する問題