Xcode 6 - 编译和使用 gtest 1.7

Xcode 6 - compile and use gtest 1.7

大约一周前,我从 Windows 和 Visual Studio 搬到了 Mac 和 Xcode。我希望能够在 Mac 上处理我的项目,所以我决定移植它。

首先,我需要测试才能在 Mac 上工作,Google 提供了 instructions 如何进行测试。使用 Xcode 构建测试后,我可以在输出目录中看到三个文件:test.frameworklibgtest_main.a 和 libgtest.a

文档说我需要 link test.framework 我的项目。因此,我创建了新的控制台应用程序项目,并使用 test.framework 文件 link 它。 不幸的是,我的构建失败了大约 70 多个问题。在我 link librettist.a 我的项目之后,它失败了,只有两个问题。他们在这里:

Undefined symbols for architecture x86_64:
"testing::internal::EqFailure(char const*, char const*, std::__1::basic_string, std::__1::allocator > const&, std::__1::basic_string, std::__1::allocator > const&, bool)", referenced from: testing::AssertionResult testing::internal::CmpHelperEQ(char const*, char const*, int const&, int const&) in main.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

据我了解,linker 无法解析符号。如果我 link 我的项目与 libgtest_main.a 它没有任何改变,这个错误仍然存​​在。那么,我该如何解决呢?

我遇到了同样的问题,无法弄清楚为什么没有创建它。它在某些 32 位代码上工作正常,所以我同样感到困惑。

也就是说,gtest 包中的样本有以下注释:

EXPECT_EQ(expected, actual) is the same as EXPECT_TRUE((expected) == (actual)) except that it will print both the expected value and the actual value when the assertion fails. This is very helpful for debugging. Therefore in this case EXPECT_EQ is preferred.

ASSERT_EQ和ASSERT_TRUE也是如此。所以如果你进行替换,你会在失败的情况下丢失一些信息,但至少你可以使用它。