it-swarm-vi.tech

Cách thiết lập googleTest làm thư viện chia sẻ trên Linux

Debian không cung cấp bất kỳ gói tiền biên dịch nào cho gTest nữa. Họ đề nghị bạn tích hợp khung vào các dự án của bạn. Nhưng tôi muốn giữ cho tập tin của tôi sạch sẽ. Làm cách nào để thiết lập gTest như các phiên bản cũ (<1.6.0), để tôi có thể liên kết thư viện?

78
ManuelSchneid3r

Trước khi bạn bắt đầu, hãy chắc chắn rằng bạn đã đọc và hiểu ghi chú này từ Google ! Hướng dẫn này giúp sử dụng gtest dễ dàng, nhưng có thể giới thiệu lỗi khó chịu .

1. Lấy khung googletest

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

Hoặc lấy nó bằng tay . Tôi sẽ không duy trì Hướng dẫn nhỏ này, vì vậy nếu bạn tình cờ thấy nó và các liên kết đã lỗi thời, vui lòng chỉnh sửa nó.

2. Giải nén và xây dựng bài kiểm tra google

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

3. "Cài đặt" các tiêu đề và lib trên hệ thống của bạn.

Bước này có thể khác với distro đến distro, vì vậy hãy đảm bảo bạn sao chép các tiêu đề và lib trong thư mục chính xác. Tôi đã thực hiện điều này bằng cách kiểm tra vị trí Debians libs gtest trước đây được đặt. Nhưng tôi chắc chắn có nhiều cách tốt hơn để làm điều này. Lưu ý: make install nguy hiểm và không được hỗ trợ

$ Sudo cp -a include/gtest /usr/include
$ Sudo cp -a libgtest_main.so libgtest.so /usr/lib/

4. Cập nhật bộ đệm của trình liên kết

... và kiểm tra xem Trình liên kết GNU có biết libs không

$ Sudo ldconfig -v | grep gtest

Nếu đầu ra trông như thế này:

libgtest.so.0 -> libgtest.so.0.0.0
libgtest_main.so.0 -> libgtest_main.so.0.0.0

, mọi thứ đều ổn.

gTestframework hiện đã sẵn sàng để sử dụng. Chỉ cần đừng quên liên kết dự án của bạn với thư viện bằng cách đặt -lgtest làm cờ liên kết và tùy chọn, nếu bạn không viết chính trình kiểm tra của riêng mình, cờ -lgtest_main rõ ràng.

Từ đây, bạn có thể muốn truy cập Googles tài liệu về khung để tìm hiểu cách thức hoạt động của nó. Chúc mừng mã hóa!

Chỉnh sửa : Điều này cũng hoạt động với OS X! Xem "Cách thiết lập googleTest đúng cách trên OS X"

128
ManuelSchneid3r

Hãy để tôi trả lời điều này cụ thể cho người dùng Ubuntu . Trước tiên hãy bắt đầu bằng cách cài đặt gói phát triển gtest.

Sudo apt-get install libgtest-dev

Lưu ý rằng gói này chỉ cài đặt các tập tin nguồn. Bạn phải tự biên dịch mã để tạo các tệp thư viện cần thiết. Các tệp nguồn này phải được đặt tại/usr/src/gtest. Duyệt đến thư mục này và sử dụng cmake để biên dịch thư viện:

Sudo apt-get install cmake # install cmake
cd /usr/src/gtest
Sudo cmake CMakeLists.txt
Sudo make

# copy or symlink libgtest.a and libgtest_main.a to your /usr/lib folder
Sudo cp *.a /usr/lib

Bây giờ để biên dịch các chương trình của bạn sử dụng gtest, bạn phải liên kết nó với:

-lgtest -lgtest_main

Điều này làm việc hoàn hảo cho tôi trên Ubuntu 14.04LTS.

24
amritkrs

Tôi phải mất một thời gian để tìm ra điều này bởi vì "make install" thông thường đã bị xóa và tôi không sử dụng cmake. Dưới đây là kinh nghiệm của tôi để chia sẻ. Tại nơi làm việc, tôi không có quyền truy cập root trên Linux, vì vậy tôi đã cài đặt khung kiểm tra Google trong thư mục chính của mình: ~/usr/gtest/.

Để cài đặt gói trong ~/usr/gtest/dưới dạng thư viện dùng chung, cùng với bản dựng mẫu:

$ 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

Để xác thực cài đặt, sử dụng test.c sau đây làm ví dụ kiểm tra đơn giản:

    #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();
    }

Để biên dịch:

    $ 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 
24
user3061373

Nếu bạn tình cờ sử dụng CMake, bạn có thể sử dụng ExternalProject_Add như được mô tả tại đây .

Điều này tránh cho bạn phải giữ mã nguồn gtest trong kho lưu trữ của bạn hoặc cài đặt nó ở bất cứ đâu. Nó được tải xuống và xây dựng trong cây xây dựng của bạn tự động.

7
Fraser

Tôi cũng bị ảnh hưởng tương tự bởi tình huống này và cuối cùng đã tạo ra các gói nguồn Ubuntu của riêng mình cho việc này. Các gói nguồn này cho phép bạn dễ dàng sản xuất một gói nhị phân. Chúng được dựa trên nguồn gtest & gmock mới nhất kể từ bài đăng này.

Gói nguồn DEB của Google Test

Gói nguồn Google Mock DEB

Để xây dựng gói nhị phân, hãy làm điều này:

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

Nó có thể cho bạn biết rằng bạn cần một số gói cần thiết trước trong trường hợp bạn chỉ cần cài đặt apt-get chúng . Ngoài ra, các gói nhị phân .deb được xây dựng nên nằm trong thư mục mẹ.

Đối với GMock, quá trình này là như nhau.

Là một lưu ý phụ, mặc dù không cụ thể đối với các gói nguồn của tôi, khi liên kết gtest với thử nghiệm đơn vị của bạn, hãy đảm bảo rằng gtest được bao gồm trước ( https://bbs.archlinux.org/viewtopic.php?id=156639 ) Đây có vẻ như là một gotcha thông thường.

1
Nick Weedon

Chỉ trong trường hợp ai đó gặp tình huống tương tự như tôi ngày hôm qua (2016-06-22) và cũng không thành công với các phương pháp đã được đăng - trên Lubuntu 14.04, nó hoạt động với tôi bằng chuỗi lệnh sau:

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
1
Tobias Hermann

Câu trả lời này từ Askubfox là những gì làm việc cho tôi. Có vẻ đơn giản hơn các tùy chọn khác ít bị lỗi hơn, vì nó sử dụng gói libgtest-dev để lấy các nguồn và bản dựng từ đó: https://askubfox.com/questions/145887/why-no-l Library-files-install-for -google-test? answerertab = phiếu # tab-top

Vui lòng tham khảo câu trả lời đó, nhưng cũng giống như một phím tắt tôi cũng cung cấp các bước ở đây:

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/

Sau đó, tôi có thể xây dựng dự án của mình phụ thuộc vào gtest mà không gặp vấn đề gì.

1
jotadepicas

Điều này sẽ xây dựng và cài đặt cả gtest và 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
0
Bl00dh0und

Điều này sẽ cài đặt google test và thư viện giả trong hệ thống dựa trên Ubuntu/Debian:

Sudo apt-get install google-mock

Đã thử nghiệm trên đám mây google trong hình ảnh dựa trên debian.

0
Shubham Chaudhary

Phương pháp sau đây tránh làm rối thủ công thư mục /usr/lib trong khi cũng yêu cầu thay đổi tối thiểu trong tệp CMakeLists.txt của bạn. Nó cũng cho phép trình quản lý gói của bạn gỡ cài đặt sạch libgtest-dev.

Ý tưởng là khi bạn nhận được gói libgtest-dev thông qua

Sudo apt install libgtest-dev

Nguồn được lưu trữ ở vị trí /usr/src/googletest

Bạn có thể chỉ cần trỏ CMakeLists.txt vào thư mục đó để nó có thể tìm thấy các phụ thuộc cần thiết

Chỉ cần thay thế FindGTest bằng add_subdirectory(/usr/src/googletest gtest)

Cuối cùng, nó sẽ trông như thế này

add_subdirectory(/usr/src/googletest gtest)
target_link_libraries(your_executable gtest)
0
Rufus

Cho 1.8.1 dựa trên câu trả lời của @ ManuelSchneid3r Tôi phải làm:

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

Sau đó tôi đã làm make install có vẻ hoạt động cho 1.8.1, nhưng Theo sau @ ManuelSchneid3r có nghĩa là:

Sudo cp -a googletest/include/gtest /usr/include
Sudo cp -a googlemock/include/gmock /usr/include
Sudo cp `find .|grep .so$` /usr/lib/
0
ntg