2017-03-20 16 views
0

私はよくコンパイルしたライブラリを作成しました。 ライブラリファイルは "libTextSearch.so"C++ Linuxエラー共有ライブラリを読み込み中 `undefined symbol:pthread_create`

threadが作成されます。私が言ったように

TextSearch::TextSearch(){ 
    std::thread t(&TextSearch::ThreadProc, this); 
    t.detach(); 
} 

、ライブラリのコンパイルと私は libTextSearch.soファイルを持っている:私はこのためのC++ 11個のスレッドを使用しています。

私は別のアプリケーションでライブラリをロードしようとしています:

void* handle = dlopen("libTextSearch.so", RTLD_LAZY); 
if(!handle){ 
    //std::cout << "\n Failed to load libTextSearch.so\n\n"; 
    fprintf(stderr, "dlopen failed: %s\n", dlerror()); 
    return 1; 
} 

は、私はすでに/usr/libにコピーされたパッケージを持っています。これは私が得る出力です:

dlopen failed: /usr/lib/libTextSearch.so: undefined symbol: pthread_create 
RUN FINISHED; exit value 1; real time: 0ms; user: 0ms; system: 0ms 

私はこれを見上げましたquestion。私はそれが関連していると思うが、私はそれを私の状況に適用することは考えていない。

アイデア?

答えて

1

しかし、私は `とのstd ::スレッドt(&TEXTSEARCH別の問題に直面しています、これはロードの問題を解決しRTLD_GLOBAL

void* handlePthread = dlopen("libpthread.so.0", RTLD_GLOBAL | RTLD_LAZY); 
if(!handlePthread){ 
    //std::cout << "\n Failed to load libpthread.so.0\n\n"; 
    fprintf(stderr, "dlopen failed: %s\n", dlerror()); 
    return 1; 
} 
+0

これは私が持っていたものです: 'dlopenは失敗しました:libpthread.so.0:dlopen()の無効なモード:無効な引数' – Everyone

+0

@Everyone EDITED、テストを '| RTLD_LAZY' please – Rama

+0

ありがとうございます!すべての私の問題を修正 – Everyone

1

このプロジェクトの構築方法やlibTextSearch.soの構築方法がわからないので、libTextSearchを生成するときにlibpthreadにリンクする必要があります。通常、ビルド環境では、動的にリンクする引数として-lpthreadを指定します。例えば

gcc -c testsearch.cpp -lpthread -o textsearch.o 

+0

おかげで、事前にジャストdlopenthreadライブラリ: :ThreadProc、this); '。それは、 'pthread'として扱われるのではなく、実行時エラーを引き起こします。どんな手掛かり? – Everyone

+0

答えをありがとう、ラーマの答えは私のためにすべてを固定 – Everyone

+0

@エイリアンハッピーコーディングの友人 –

関連する問題