2

我正在尝试将 gtest 与 ndk 一起使用,ndk-build 找到了依赖关系,但我在内部 gtest 文件 gtest-printers.h 上有一个 sintax 错误

external/gtest/include/gtest/gtest-printers.h:170:9: error: ambiguous overload for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char, std::char_traits<char> >}' and 'const BiggestInt {aka const long long int}')
     *os << kBigInt;
         ^

跟随我的 Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := my_module

GTEST_DIR := $(LOCAL_PATH)/../../external/gtest

LOCAL_CPP_EXTENSION := .cxx .cpp .cc

LOCAL_CFLAGS := -D_STLP_USE_NEWALLOC

LOCAL_CPPFLAGS += -std=c++11

LOCAL_SRC_FILES :=                             \
    ...

LOCAL_C_INCLUDES :=                            \
    ...

LOCAL_C_INCLUDES += ${NDK_ROOT}/sources/cxx-stl/stlport/stlport
LOCAL_C_INCLUDES += ${GTEST_DIR}/include

LOCAL_LDLIBS    += -llog
LOCAL_LDLIBS    += -landroid
LOCAL_LDLIBS    += -lstdc++

LOCAL_STATIC_LIBRARIES := $(GTEST_DIR)/lib/libgtest.a

include $(BUILD_EXECUTABLE)
4

3 回答 3

3

我们遇到了同样的问题,工作解决方案是使用:

LOCAL_CPPFLAGS += -std=gnu++11

而不是LOCAL_CPPFLAGS+=-std=c++11. 它必须设置了一些不同的long long intin映射stlport

于 2015-03-03T12:30:30.540 回答
2

我的问题是尝试直接调用静态 gtest lib,而不是我之前必须这样做:

include $(CLEAR_VARS)
GTEST_DIR := ${NDK_ROOT}/sources/third_party/googletest/googletest
LOCAL_MODULE    := gtest

# flag for c++11
LOCAL_CPPFLAGS += -std=c++11

LOCAL_C_INCLUDES += ${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include
LOCAL_C_INCLUDES += ${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/include/
LOCAL_C_INCLUDES += ${GTEST_DIR}/include/
LOCAL_C_INCLUDES += ${GTEST_DIR}/

LOCAL_SRC_FILES := ${GTEST_DIR}/src/gtest-all.cc              \
                   ${GTEST_DIR}/src/gtest.cc                  \
                   ${GTEST_DIR}/src/gtest-death-test.cc       \
                   ${GTEST_DIR}/src/gtest-filepath.cc         \
                   ${GTEST_DIR}/src/gtest_main.cc             \
                   ${GTEST_DIR}/src/gtest-port.cc             \
                   ${GTEST_DIR}/src/gtest-printers.cc         \
                   ${GTEST_DIR}/src/gtest-test-part.cc        \
                   ${GTEST_DIR}/src/gtest-typed-test.cc

LOCAL_STATIC_LIBRARIES += ${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/thumb/libgnustl_static.a

include $(BUILD_STATIC_LIBRARY)
于 2014-12-02T15:08:20.667 回答
0

看起来 C++11 + stlport 是 gtest 的糟糕组合。这并不奇怪,因为 stlport 实际上没有任何对 C++11 的支持(它的某些部分可以工作,其他部分显然不会)。如果这只会在构建 gtest 时引起问题,那么在构建gtest 时您不能使用 C++11,但仍然适用于您的代码。

如果您也不能从 C++11 使用它,那么您现在可能不走运(一旦我有时间应该有更好的选择)。

于 2014-11-20T01:22:21.750 回答