【问题标题】:Combining C++11 and TR1-dependent code in OSX?在 OSX 中结合 C++11 和 TR1 依赖的代码?
【发布时间】:2013-06-18 15:59:48
【问题描述】:

我有一个使用 Google Test 的 C++11 项目,它在 Linux 中构建得很好。在 Mac 上,我很难将它集成到我的代码库中。问题似乎是,虽然我的代码使用 C++11,但 Google 代码使用 TR1。因此,enumunordered_set 等 TR 数据结构的包含方式不同。

Google 测试示例按照提供的方式完美构建和运行。如果我使用 clang++ 而不是 g++,这些示例也可以构建得很好。 (我的代码只适用于 clang++,所以我使用它来构建。)最后,如果我使用 -std=c++11,Google 的代码也会构建和运行。

但是,如果我使用 -stdlib=libc++,Google 测试不会在我的 mac 上使用 clang++ 构建。它报告它找不到 tr1/tuple,这当然是真的。这是个问题,因为如果我使用-stdlib=libstdc++(或没有stdlib 参数),my 代码不会生成。

当然,我可以将所有代码切换到旧标准。然而,这非常令人讨厌。有没有办法让这些代码库在 Mac 上愉快地并存?

我的代码在 Ubuntu 12.04 计算机上使用 g++ 4.6.3 的 Google 测试构建得很愉快。 mac 运行的是 OSX 10.8.3。它正在运行 g++ 4.2.1 和 clang 4.2++。

感谢您的帮助, 大卫

PS:我对 C++ 有点陌生,如果这是一个愚蠢的问题,请原谅我。

编辑:将“OS/X”更改为“OSX”。 (是的,我已经那么老了。)

【问题讨论】:

  • 您在 MacOSX 上使用哪些编译器和哪些版本?我相信,如果您在 Mac 上构建 GCC 4.8,它将像 Linux 一样编译您的代码!今天大多数 Linux 的 GCC 都比 4.2 更新!
  • Basile,做到了!谢谢。

标签: c++11 xcode4.2 googletest tr1 clang++


【解决方案1】:

您可以指示 Google 测试使用其自己的 tr1::tuple 实现

在 cmake 中,我使用以下行来使用“旧”编译器进行编译:

add_definitions(-DGTEST_HAS_TR1_TUPLE=0)

我相信您可以将它添加到您的构建系统中,这是一个简单的预处理器定义。

您可以查看include/gtest/internal/gtest-port.h 了解更多选项。 GTEST_USE_OWN_TR1_TUPLE 可能有用。大多数参数都是正确的,具有默认值。

【讨论】:

    猜你喜欢
    • 2020-02-29
    • 2013-10-03
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多