Я пытаюсь использовать gtest с ndk, ndk-build находит зависимости, но у меня ошибка синтаксиса во внутреннем файле gtest gtest-printers.h
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)
Мы столкнулись с той же проблемой, и рабочим решением было использовать:
LOCAL_CPPFLAGS += -std=gnu++11
вместо LOCAL_CPPFLAGS+=-std=c++11
, Должно быть, было установлено несколько разных отображений long long int
в stlport
,
Моя проблема была в том, чтобы попытаться вызвать static 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)
Похоже, C ++ 11 + stlport — плохая комбинация для gtest. Это неудивительно, учитывая, что stlport на самом деле не поддерживает C ++ 11 (некоторые его части будут работать, другие, по-видимому, не будут). Если это только вызывает проблемы, когда строительство gtest, вы можете просто не использовать C ++ 11 при сборке gtest, но все же для своего кода.
Если вы не можете использовать его и в C ++ 11, возможно, вам сейчас не повезло (должен быть лучший вариант, как только я найду время).