Linux에서 googleTest를 공유 라이브러리로 설정하는 방법 컴파일 된 패키지를 제공하지

Debian은 더 이상 gTest 용으로 사전 컴파일 된 패키지를 제공하지 않습니다. 프레임 워크를 프로젝트의 메이크 파일에 통합 할 것을 제안합니다. 하지만 내 메이크 파일을 깨끗하게 유지하고 싶습니다. 라이브러리에 연결할 수 있도록 이전 버전 (<1.6.0)과 같이 gTest를 설정하려면 어떻게해야합니까?



답변

시작하기 전에 Google의이 메모를 읽고 이해했는지 확인하십시오
! 이 튜토리얼은 gtest를 쉽게 사용할 수있게 해주지 만 끔찍한 버그 가 생길 수 있습니다 .

1. googletest 프레임 워크 가져 오기

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

또는 손으로 가져 오십시오 . 이 작은 How-to는 유지하지 않을 것이므로 우연히 발견하고 링크가 구식이면 자유롭게 편집하십시오.

2. Google 테스트 압축 풀기 및 빌드

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

3. 시스템에 헤더와 라이브러리를 “설치”합니다.

이 단계는 배포판마다 다를 수 있으므로 올바른 디렉토리에 헤더와 라이브러리를 복사해야합니다. 나는 데비안의 이전 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 링커가 libs를 알고 있는지 확인하십시오.

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를 올바르게 설정하는 방법”을 참조하십시오.


답변

우분투 사용자를 위해 특별히 대답하겠습니다. 먼저 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에서 루트 액세스 권한이 없으므로 홈 디렉토리 아래에 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 테스트 (패키지 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사용자 지정 기본 메서드를 사용하지 않는 경우) 및 -lpthread. 이것은 적어도 내 경우에 Google Test를 사용하기에 충분했습니다.

최신 버전의 Google 테스트를 원하면 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.


답변

나는 이와 비슷하게이 상황에 압도 당했고 결국이를위한 우분투 소스 패키지를 만들었다. 이러한 소스 패키지를 사용하면 바이너리 패키지를 쉽게 생성 할 수 있습니다. 이 게시물의 최신 gtest 및 gmock 소스를 기반으로합니다.

Google 테스트 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-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