簡體   English   中英

如何在 Linux 上將 googleTest 設置為共享庫

[英]How to set up googleTest as a shared library on Linux

Debian 不再為 gTest 提供任何預編譯包。 他們建議您將框架集成到項目的 makefile 中。但我想保持我的 makefile 干凈。 如何像以前的版本(<1.6.0)一樣設置 gTest,以便我可以鏈接到庫?

在開始之前,請確保您已閱讀並理解Google 的這篇筆記 本教程使 gtest 的使用變得簡單,但可能會引入令人討厭的錯誤

1.獲取googletest框架

wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz

或者手動獲取。 我不會維護這個小操作方法,所以如果你偶然發現它並且鏈接已經過時,請隨時編輯它。

2. 解壓並構建google test

tar xf release-1.8.0.tar.gz
cd googletest-release-1.8.0
cmake -DBUILD_SHARED_LIBS=ON .
make

3. 在您的系統上“安裝”頭文件和庫。

此步驟可能因發行版而異,因此請確保將標頭和庫復制到正確的目錄中。 我通過檢查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/

4.更新鏈接器的緩存

...並檢查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! 請參閱“如何在 OS X 上正確設置 googleTest”

讓我專門為 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

這在 Ubuntu 14.04LTS 上非常適合我。

我花了一段時間才弄清楚這一點,因為正常的“make install”已被刪除,而且我不使用 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 

如果你碰巧使用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 至少在我的情況下,這足以使用 Google Test。

如果您想要最新版本的 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 源。

谷歌測試 DEB 源碼包

Google Mock DEB 源碼包

要構建二進制包,請執行以下操作:

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 ) 這似乎是一個常見問題。

以防萬一其他人昨天(2016 年 6 月 22 日)遇到和我一樣的情況,並且使用已經發布的方法也沒有成功 - 在Lubuntu 14.04它使用以下命令鏈對我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 : libgtest-dev -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構建依賴於gtest項目。

以下方法避免了手動弄亂/usr/lib目錄,同時還需要對CMakeLists.txt文件進行最少的更改。 它還可以讓您的包管理器干凈地卸載libgtest-dev

這個想法是,當你得到libgtest-dev通過包

sudo apt install libgtest-dev

源存儲在位置/usr/src/googletest

您可以簡單地將CMakeLists.txt指向該目錄,以便它可以找到必要的依賴項

只需更換FindGTestadd_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 的圖像中在谷歌雲中測試。

這將構建並安裝 gtest 和 gmock 1.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

使用busterbullseye可以安裝以下三個包而無需編譯任何東西:

sudo apt-get install libgtest-dev libgmock-dev googletest

這包括 gmock。

對於基於@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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM