簡體   English   中英

無法在 OSX Yosemite 上編譯 googletest

[英]Cant compile googletest on OSX Yosemite

我已經在網上閱讀了一些相關的答案和一些文章以及官方的 Google Test 文檔,但是由於我在這方面缺乏經驗,因此我對一些事情非常不安全並尋求指導。

我正在用 C++ 開始一個全新的寵物項目,我想在編寫代碼時編寫適當的測試,遇到 Google Test 並決定試一試。

目前這是我的文件夾結構:

/
/bin
/main.cpp
/lib
/lib/db
/lib/external/googletest

我的想法是將測試和類文件放在自己的文件夾中,例如:

/lib/db/db.h
/lib/db/db.cpp
/lib/db/db.test

問題#1

包含測試的文件是否有命名約定或期望? /lib/db/db.test那個例子中的/lib/db/db.test

問題2

我運行了以下命令

  1. cd lib/external/googletest/googletest
  2. 制作。
  3. 制作
  4. 進行安裝
  5. cp lib*.a /usr/local/lib
  6. cp -r 包含/gtest/ /usr/local/include/

並看到它最終如何在 /usr/local/include/gtest 中創建一系列 .h 文件,我希望能夠#include <gtest/gtest.h>並能夠運行測試,我將此添加到我的主.cpp:

TEST(Param1, Param2) {
    EXPECT_EQ(1, 1);
}

並且在構建時出現以下錯誤:

Undefined symbols for architecture x86_64:
  "testing::AssertionSuccess()", referenced from:
      testing::AssertionResult testing::internal::CmpHelperEQ<int, int>(char const*, char const*, int const&, int const&) in main-230b96.o
  "testing::Test::SetUp()", referenced from:
      vtable for Param1_Param2_Test in main-230b96.o
  "testing::Test::TearDown()", referenced from:
      vtable for Param1_Param2_Test in main-230b96.o
  "testing::Test::Test()", referenced from:
      Param1_Param2_Test::Param1_Param2_Test() in main-230b96.o
  "testing::Test::~Test()", referenced from:
      Param1_Param2_Test::~Param1_Param2_Test() in main-230b96.o
  "testing::Message::Message()", referenced from:
      Param1_Param2_Test::TestBody() in main-230b96.o
  "testing::internal::AssertHelper::AssertHelper(testing::TestPartResult::Type, char const*, int, char const*)", referenced from:
      Param1_Param2_Test::TestBody() in main-230b96.o
  "testing::internal::AssertHelper::~AssertHelper()", referenced from:
      Param1_Param2_Test::TestBody() in main-230b96.o
  "testing::internal::GetTestTypeId()", referenced from:
      ___cxx_global_var_init in main-230b96.o
  "testing::internal::MakeAndRegisterTestInfo(char const*, char const*, char const*, char const*, testing::internal::CodeLocation, void const*, void (*)(), void (*)(), testing::internal::TestFactoryBase*)", referenced from:
      ___cxx_global_var_init in main-230b96.o
  "testing::internal::IsTrue(bool)", referenced from:
      testing::internal::scoped_ptr<std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::reset(std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) in main-230b96.o
      testing::internal::scoped_ptr<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::reset(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) in main-230b96.o
  "testing::internal::EqFailure(char const*, char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool)", referenced from:
      testing::AssertionResult testing::internal::CmpHelperEQFailure<int, int>(char const*, char const*, int const&, int const&) in main-230b96.o
  "testing::internal::AssertHelper::operator=(testing::Message const&) const", referenced from:
      Param1_Param2_Test::TestBody() in main-230b96.o
  "typeinfo for testing::Test", referenced from:
      typeinfo for Param1_Param2_Test in main-230b96.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [all] Error 1

解決方案

感謝 trojanfoe,我修復了我的 makefile 看起來像這樣:

CC=g++
target_folder=bin
all:
    $(CC) *.cpp -o $(target_folder)/prod
    ./bin/prod
test:
    $(CC) *.cpp -o $(target_folder)/test lib/external/googletest/googletest/libgtest.a lib/external/googletest/googletest/libgtest_main.a
    ./bin/test
clean:
    rm -f $(target_folder)/* *.o

現在它工作得很好,請記住這是一個骨架項目,我需要構建測試文件和入口點,所以此時它只是編譯一個基本測試。

您忘記將 google 測試庫與您的可執行文件鏈接。

暫無
暫無

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

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