Debianは、gTest用のプリコンパイル済みパッケージを提供しなくなりました。フレームワークをプロジェクトのメイクファイルに統合することをお勧めします。しかし、メイクファイルをクリーンに保ちたいです。以前のバージョン(<1.6.0)のようにgTestを設定して、ライブラリに対してリンクできるようにするにはどうすればよいですか?
Debianは、gTest用のプリコンパイル済みパッケージを提供しなくなりました。フレームワークをプロジェクトのメイクファイルに統合することをお勧めします。しかし、メイクファイルをクリーンに保ちたいです。以前のバージョン(<1.6.0)のようにgTestを設定して、ライブラリに対してリンクできるようにするにはどうすればよいですか?
回答:
始める前に、読んで理解したことを確認してください 、Googleからのこのメモ。このチュートリアルでは、gtestの使用が簡単になりますが、厄介なバグが発生する可能性があります。
wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz
またはそれを取得します 手。私はこの小さなハウツーを維持しませんので、あなたがそれに遭遇し、リンクが古くなっている場合は、それを編集してください。
tar xf release-1.8.0.tar.gz
cd googletest-release-1.8.0
cmake -DBUILD_SHARED_LIBS=ON .
make
この手順はディストリビューションごとに異なる可能性があるため、ヘッダーとライブラリを正しいディレクトリにコピーしてください。私はDebianの以前のgtestライブラリがどこにあるかをチェックすることによってこれを達成しました。しかし、これを行うにはもっと良い方法があると確信しています。注:make install
危険であり、サポートされていません
sudo cp -a googletest/include/gtest /usr/include
sudo cp -a googlemock/gtest/libgtest_main.so googlemock/gtest/libgtest.so /usr/lib/
...そしてGNUリンカーがライブラリを知っているかどうかを確認します
sudo ldconfig -v | grep gtest
出力が次のようになっている場合:
libgtest.so.0 -> libgtest.so.0.0.0
libgtest_main.so.0 -> libgtest_main.so.0.0.0
その後、すべてが大丈夫です。
これで、gTestframeworkを使用する準備が整いました。-lgtest
リンカーフラグとして設定することにより、プロジェクトをライブラリにリンクすることを忘れないでください。オプションで、独自のテストメインルーチンを作成しなかった場合は、明示的な-lgtest_main
フラグを。
ここからは、Googleのドキュメント、およびフレームワークに関する古いドキュメントにアクセスして、フレームワークがどのように機能するかを確認することをお勧めします。ハッピーコーディング!
編集: これはOS Xでも機能します!「OSXでgoogleTestを正しく設定する方法」を参照してください
make install
ライブラリとヘッダーを手動でコピーする代わりに使用できるターゲットはありませんか?
'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system.
include/gtest
私の知る限りではありません。
sudo cp -a libgtest_main.so libgtest.so /usr/lib/
もう働きません。そもそもファイルはそこにもありません。
特にubuntuユーザーのためにこれに答えさせてください。まず、gtest開発パッケージをインストールすることから始めます。
sudo apt-get install libgtest-dev
このパッケージはソースファイルのみをインストールすることに注意してください。必要なライブラリファイルを作成するには、コードを自分でコンパイルする必要があります。これらのソースファイルは/ usr / src / gtestにあります。このフォルダーを参照し、cmakeを使用してライブラリをコンパイルします。
sudo apt-get install cmake # install cmake
cd /usr/src/gtest
sudo mkdir build
cd build
sudo cmake ..
sudo make
sudo make install
ここで、gtestを使用するプログラムをコンパイルするには、次のものとリンクする必要があります。
-lgtest -lgtest_main -lpthread
これは、Ubuntu14.04LTSで完全に機能しました。
sudo cp *.a /usr/lib
で交換する必要はありませんsudo make install
。交換するだけで問題ありません。
通常の「makeinstall」が削除され、cmakeを使用していないため、これを理解するのに少し時間がかかりました。これが私の経験です。職場では、Linuxにrootアクセス権がないため、ホームディレクトリの下にGoogleテストフレームワークをインストールしました。~/usr/gtest/
。
パッケージを共有ライブラリとして〜/ usr / gtest /にインストールするには、サンプルビルドも一緒に使用します。
$ mkdir ~/temp
$ cd ~/temp
$ unzip gtest-1.7.0.zip
$ cd gtest-1.7.0
$ mkdir mybuild
$ cd mybuild
$ cmake -DBUILD_SHARED_LIBS=ON -Dgtest_build_samples=ON -G"Unix Makefiles" ..
$ make
$ cp -r ../include/gtest ~/usr/gtest/include/
$ cp lib*.so ~/usr/gtest/lib
インストールを検証するには、簡単なテスト例として次のtest.cを使用します。
#include <gtest/gtest.h>
TEST(MathTest, TwoPlusTwoEqualsFour) {
EXPECT_EQ(2 + 2, 4);
}
int main(int argc, char **argv) {
::testing::InitGoogleTest( &argc, argv );
return RUN_ALL_TESTS();
}
コンパイルします:
$ export GTEST_HOME=~/usr/gtest
$ export LD_LIBRARY_PATH=$GTEST_HOME/lib:$LD_LIBRARY_PATH
$ g++ -I $GTEST_HOME/include -L $GTEST_HOME/lib -lgtest -lgtest_main -lpthread test.cpp
lgtest_main
)に対してリンクする場合main
、テストファイルで独自に定義する必要はありません。
CMakeを使用しExternalProject_Add
ている場合は、ここで説明されているように使用できます。
これにより、gtestのソースコードをリポジトリに保存したり、どこにでもインストールしたりする必要がなくなります。ダウンロードされ、ビルドツリーに自動的に組み込まれます。
Debian / Ubuntuのアップデート
Google Mock(パッケージ:)google-mock
とGoogle Test(パッケージ:)libgtest-dev
が統合されました。新しいパッケージはと呼ばれgoogletest
ます。両方の古い名前は下位互換性のために引き続き使用可能であり、現在は新しいパッケージに依存していますgoogletest
。
したがって、パッケージリポジトリからライブラリを取得するには、次のようにします。
sudo apt-get install googletest -y
cd /usr/src/googletest
sudo mkdir build
cd build
sudo cmake ..
sudo make
sudo cp googlemock/*.a googlemock/gtest/*.a /usr/lib
その後、に対して-lgmock
(または-lgmock_main
カスタムmainメソッドを使用しない場合はに対して)リンクすることができます。-lpthread
。少なくとも私の場合、これはGoogleTestを使用するのに十分でした。
Google Testの最新バージョンが必要な場合は、githubからダウンロードしてください。その後の手順は似ています。
git clone https://github.com/google/googletest
cd googletest
sudo mkdir build
cd build
sudo cmake ..
sudo make
sudo cp lib/*.a /usr/lib
ご覧のとおり、ライブラリが作成されるパスが変更されています。新しいパスは、パッケージリポジトリでもまもなく有効になる可能性があることに注意してください。
ライブラリを手動でコピーする代わりに、を使用できますsudo make install
。「現在」は機能しますが、過去に常に機能するとは限らないことに注意してください。また、このコマンドを使用する場合、ターゲットの場所を制御することはできず、汚染したくない場合があります/usr/lib
。
私も同様にこの状況に圧倒され、このために独自のUbuntuソースパッケージを作成することになりました。これらのソースパッケージを使用すると、バイナリパッケージを簡単に作成できます。これらは、この投稿の時点での最新のgtestおよびgmockソースに基づいています。
バイナリパッケージをビルドするには、次のようにします。
tar -xzvf gtest-1.7.0.tar.gz
cd gtest-1.7.0
dpkg-source -x gtest_1.7.0-1.dsc
cd gtest-1.7.0
dpkg-buildpackage
いくつかの前提条件のパッケージが必要であると表示される場合があります。その場合は、apt-getでインストールする必要があります。それとは別に、ビルドされた.debバイナリパッケージは親ディレクトリに配置されている必要があります。
GMockの場合、プロセスは同じです。
ちなみに、私のソースパッケージに固有ではありませんが、gtestをユニットテストにリンクするときは、gtestが最初に含まれていることを確認してください(https://bbs.archlinux.org/viewtopic.php?id=156639)これは一般的な落とし穴。
testing::Message::Message()' test.cpp:(.text+0x84): undefined reference to
testing :: internal :: AssertHelper :: AssertHelper(testing :: TestPartResult :: Type、char const *、int、char const *) 'テストへの未定義の参照です。 cpp :(。text + 0x97): `testing :: internal :: AssertHelper :: operator =(testing :: Message const&)const 'への未定義の参照...長すぎて全部を投稿できません。これを新しいUbuntu14.04 VMで行ったので、必要な依存関係以外は何もインストールされませんでした。
#include <gtest/gtest.h> TEST(MathTest, TwoPlusTwoEqualsFour) { EXPECT_EQ(2 + 2, 4); } int main(int argc, char **argv) { ::testing::InitGoogleTest( &argc, argv ); return RUN_ALL_TESTS(); }
他の誰かが昨日(2016-06-22)のように同じ状況に陥り、すでに投稿されたアプローチで成功しなかった場合に備えLubuntu 14.04
て、次の一連のコマンドを使用して機能しました。
git clone https://github.com/google/googletest
cd googletest
cmake -DBUILD_SHARED_LIBS=ON .
make
cd googlemock
sudo cp ./libgmock_main.so ./gtest/libgtest.so gtest/libgtest_main.so ./libgmock.so /usr/lib/
sudo ldconfig
askubuntuからのこの答えは私のために働いたものです。パッケージlibgtest-dev
を使用してソースを取得し、そこからビルドするため、他のオプションよりも単純でエラーが発生しにくいようです。 https //askubuntu.com/questions/145887/why-no-library-files-installed-for-google- test?answertab = votes#tab-top
その回答を参照してください。ただし、ショートカットとして、ここにも手順を示します。
sudo apt-get install -y libgtest-dev
sudo apt-get install -y cmake
cd /usr/src/gtest
sudo cmake .
sudo make
sudo mv libg* /usr/lib/
その後、gtest
問題なく依存するプロジェクトを構築することができました。
次の方法では/usr/lib
、CMakeLists.txt
ファイルを最小限に変更するだけで、ディレクトリを手動で操作する必要がなくなります。また、パッケージマネージャーをクリーンにアンインストールすることもできますlibgtest-dev
。
アイデアは、あなたがlibgtest-dev
経由してパッケージを取得するときです
sudo apt install libgtest-dev
ソースは場所に保存されます /usr/src/googletest
CMakeLists.txt
必要な依存関係を見つけることができるように、そのディレクトリをポイントするだけです。
単純に置き換えるFindGTest
とadd_subdirectory(/usr/src/googletest gtest)
最後に、それはこのように見えるはずです
add_subdirectory(/usr/src/googletest gtest)
target_link_libraries(your_executable gtest)
これにより、Ubuntu / DebianベースのシステムにGoogleテストとモックライブラリがインストールされます。
sudo apt-get install google-mock
debianベースの画像でグーグルクラウドでテストされています。
googlemock
、インストールしませんgoogletest
(gtest)。少なくともそれが私に起こったことです。
これにより、gtestとgmock1.7.0の両方がビルドおよびインストールされます。
mkdir /tmp/googleTestMock
tar -xvf googletest-release-1.7.0.tar.gz -C /tmp/googleTestMock
tar -xvf googlemock-release-1.7.0.tar.gz -C /tmp/googleTestMock
cd /tmp/googleTestMock
mv googletest-release-1.7.0 gtest
cd googlemock-release-1.7.0
cmake -DBUILD_SHARED_LIBS=ON .
make -j$(nproc)
sudo cp -a include/gmock /usr/include
sudo cp -a libgmock.so libgmock_main.so /usr/lib/
sudo cp -a ../gtest/include/gtest /usr/include
sudo cp -a gtest/libgtest.so gtest/libgtest_main.so /usr/lib/
sudo ldconfig
@ ManuelSchneid3rの回答に基づく1.8.1の場合、私は次のことをしなければなりませんでした。
wget github.com/google/googletar xf release-1.8.1.tar.gz
tar xf release-1.8.1.tar.gz
cd googletest-release-1.8.1/
cmake -DBUILD_SHARED_LIBS=ON .
make
次にmake install
、1.8.1で機能するように見えましたが、@ ManuelSchneid3rに続いて次のことを意味します。
sudo cp -a googletest/include/gtest /usr/include
sudo cp -a googlemock/include/gmock /usr/include
sudo cp `find .|grep .so$` /usr/lib/
./configure && make && make install
ワークフローは問題なく機能するはずです。ソースから他の多くのパッケージをコンパイルするのと同じであるため、これが投稿を正当化するかどうかはわかりません。