#概要
Windowsで作ってたCUIアプリをCentOS6.6で使いたくて移植。
テスト通したかったのでGoogle testをビルドしたので手順とか載せておきます。
参考になれば幸い。
#入れたOS
CentOS6.6
#最新のGoogle Testを落とす・・・はずだった
ここから最新を落とす。
2015/02/06時点での最新は1.7.0。
(リリースを見る限りだと2013年9月から更新が無いんでしょうか・・・)
んで「最新のGoogle Testを落とす・・・はずだった」となっている理由なんだけど・・・
1.7.0がリンクに失敗する
多分やり方が悪いんだろうけどとりあえず試したことだけ書くので同様にはまった人が居たら何か頑張ってください!!!
とりあえず普通にREADMEに従って静的ライブラリを創りリンクすると
undefined reference to `testing::internal::EqFailure
で失敗。
関数名的にASSERT_EQを使ってる箇所でエラーってるのかと思いきや2箇所でしかエラー出てないしそうでもない様子。
色々試したけれど原因も掴めないしぐぐっても似たような症状はあるものの、
静的ライブラリリンクすれば治るんじゃね?みたいな回答しか無くてぶっちゃけ上記エラーケース的に考えればホントそれ。一体何をリンクすればいいのやら・・・
Google Testにはサンプルが入っててそっちにはgtest_main.aというライブラリがある。WinやMacの場合このライブラリが必須なんだけど別にこれをリンクしても変わらずで、時間も無かったのもあって深追いせず諦めました。
#Google Test 1.6.0を落とす
というわけで1つ前の1.6.0で解説。
修正がフィックスされてない古いバージョンのテストフレームワークを使うのは流石にどうなのって話はある。今回はテストができないよりはマシという方針になってるので悪しからず
(一応補足だけど1.6.0から1.7.0が機能追加なのか修正fixなのかとかは全然確認してないのでもしかしたら問題無いかもしれない)
ここから落としてきて適当に展開しましょい。
ダウンロードにはwget使ってるので無い人は sudo yum install wget してくだし。
$ mkdir for_work
$ cd for_work
$ wget https://googletest.googlecode.com/files/gtest-1.6.0.zip
$ unzip gtest-1.6.0.zip
展開してもディレクトリに入る必要なし。
README見れば書いてあるけど次のようにコマンド打てばおk。
$ g++ -Igtest-1.6.0/include -Igtest-1.6.0 -c gtest-1.6.0/src/gtest-all.cc; ar -rv libgtest.a gtest-all.o
これで libgtest.a が作成されるので後はこれをリンクすれば良い。
#ビルド
ビルド時に -pthread が必要だと思う。
それ以外は単純に静的ライブラリをリンクすれば良い。
一応コンパイル例も載せてみる。
$ g++ 任意option -pthread ソース libgtest.a -o unittest
#実行
[----------] Global test environment tear-down
[==========] 57 tests from 18 test cases ran. (736 ms total)
[ PASSED ] 54 tests.
[ FAILED ] 3 tests, listed below:
Win版では動いてもプラットフォームが異なればテスト通らないっすねー・・・