2017-03-27 39 views
2

私は一貫した解決策がないと同様の質問が出されているのを見ています。コマンドラインにgcc -pthread -lrt -o testChTh testChTh.cを入力した後-pthread -lrtでコンパイルしていても `shm_open 'への未定義の参照

/tmp/ccPNsJFZ.o: In function `main': 
testChTh.c:(.text+0xbfb): undefined reference to `shm_open' 
collect2: error: ld returned 1 exit status 

:Linux上のgccコンパイラを使用して 、私はメッセージを取得します。私は以下の関連のライブラリが含まれている

int shm_fd; 

    /* create the shared memory segment */ 
    shm_fd = shm_open(name, O_RDWR, 0666); 

::任意の洞察力がはるかに高く評価されて

#include <fcntl.h> 
#include <sys/shm.h> 
#include <sys/stat.h> 
#include <sys/mman.h> 
#include <unistd.h> 

私だけで私のコードに一度のshm_open使用します!あなたがlibrtを使用することを期待し、最後にtestChTh.cを提供しているとして、あなたの場合は

答えて

6

gcc -pthread -lrt -o testChTh testChTh.c 

は、仕事に行くのではありません。あなたはそれがコマンドでこのオプションを書き違いが

-l library

online manual強調鉱山)を引用

gcc -o testChTh testChTh.c -pthread -lrt 

のように記述する必要があります。
リンカーは、指定された順序でライブラリとオブジェクトファイルを検索して処理します。したがって、 'foo.o -lz bar.o'は、ファイルfoo.oの後でbar.oの前にライブラリ 'z'を検索します。 bar.oが 'z'の関数を参照する場合、それらの関数はロードされないかもしれません。

+1

ありがとうございます、これはうまくいきました。 –

関連する問題