ここからgtest1.7.0のソースをダウンロードしました:
https://code.google.com/p/googletest/downloads/list
そして、ubuntu13.10でgtest.aファイル(libファイル)をビルドします。
Linux ubuntu 3.11.0-15-generic #23-Ubuntu SMP Mon Dec 9 18:17:04 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
結果のlibはlibgtest.a
と呼ばれます。私のmain.cppファイルには次のものがあります。
#include <iostream>
#include "gtest/gtest.h"
int main(){
std::cout << "Test \n";
int argc = 2;
char* cp01;
char* cp02;
char* argv[] = {cp01, cp02};
testing::InitGoogleTest(&argc, argv);
return 0;
}
私が構築するターミナルから:
g++ main.cpp -I/home/user/gtest-1.7.0/include -L/home/user/gtest-1.7.0/lib/.libs -lpthread -lgtest
これにより、次のエラーが発生します。
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_key_create'
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_getspecific'
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_key_delete'
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_setspecific'
collect2: error: ld returned 1 exit status
これに基づく: GTestの作成中のエラー
-pthread
の代わりに-lpthread
も試しましたが、同じエラーが発生します。
g++ main.cpp -I/home/user/gtest-1.7.0/include -L/home/user/gtest-1.7.0/lib/.libs -pthread -lgtest
編集:最後の引数として-pthread
を指定しようとしました:
g++ main.cpp -I/home/user/gtest-1.7.0/include -L/home/user/gtest-1.7.0/lib/.libs -lgtest -pthread
同じエラー何が間違っているのですか?
オプション -lgtest
はダイナミックライブラリをリンクしようとしていますlibgtest.so
。静的ライブラリをリンクしたい/home/user/gtest-1.7.0/lib/.libs/libgtest.a
。
の代わりに:
g++ main.cpp -I/home/user/gtest-1.7.0/include -L/home/user/gtest-1.7.0/lib/.libs -lgtest -pthread
使用する:
g++ main.cpp -I/home/user/gtest-1.7.0/include /home/user/gtest-1.7.0/lib/.libs/libgtest.a -pthread
コマンドラインでは、結果の実行可能ファイルに名前が指定されていないことに注意してください。デフォルトではa.out
。呼び出したい場合は、たとえばmytest
、次に実行します。
g++ -o mytest main.cpp -I/home/user/gtest-1.7.0/include /home/user/gtest-1.7.0/lib/.libs/libgtest.a -pthread
-pthread
の後に-lgtest
を指定する必要があります。リンカはライブラリを順番に受け取り、その時点で未定義の参照を解決するために必要な量だけを受け取ります。
いいえ、問題はGtestのビルドにあります。
標準のconfigureアプローチを使用してビルドした場合、-lpthread
を作成するためのlibgtest.so
が正しく提供されていません。したがって、実際にpthread機能を使用する最終的な共有ライブラリを構築しようとすると失敗します。
代わりに、Cmakeアプローチを使用してください。
cd gtest-1.7.0
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=ON ..
make
そして、これらを手動で/usr/lib/
にインストールします
このバージョンは、libpthreadでlibgtestに正しくリンクします。
実行可能ファイルでgtestを使用している間は、-pthread
(pthread-libraryとのリンク用)の代わりに-lpthread
を使用してください。
[〜#〜]または[〜#〜]
-lpthread
をlibgtest.a
の後に移動します(順序は重要です)。
答えるには、おそらくもっと情報が必要です。64ビットマシンを使用していて、32ビットライブラリをダウンロードしていますか?