Help us understand the problem. What is going on with this article?

【Google Test】Google C++ Testing Frameworkをビルドして使ってみた

More than 3 years have passed since last update.

概要

Windowsで作ってたCUIアプリをCentOS6.6で使いたくて移植。
テスト通したかったのでGoogle testをビルドしたので手順とか載せておきます。
参考になれば幸い。

入れたOS

CentOS6.6

最新のGoogle Testを落とす・・・はずだった

ここから最新を落とす。

https://code.google.com/p/googletest/downloads/list

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なのかとかは全然確認してないのでもしかしたら問題無いかもしれない)

https://code.google.com/p/googletest/downloads/list

ここから落としてきて適当に展開しましょい。
ダウンロードには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版では動いてもプラットフォームが異なればテスト通らないっすねー・・・

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away