在安卓 NDK 中使用 gtest 时出现语法错误
Syntax error on using gtest with Android NDK
我正在尝试将 gtest 与 ndk 一起使用,ndk-build 找到了依赖项,但我在内部 gtest 文件 gtest-printers 上有一个 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)
我们遇到了同样的问题,工作解决方案是使用:
LOCAL_CPPFLAGS += -std=gnu++11
而不是LOCAL_CPPFLAGS+=-std=c++11
.它必须在stlport
中设置了一些不同的long long int
映射。
我的问题是尝试直接调用静态 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 时导致问题,那么在构建 gtest 时可以不使用 C++11,但仍然可以用于您的代码。
如果你也不能从 C++11 开始使用它,你现在可能不走运(一旦我有时间,应该有更好的选择)。
相关文章:
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- "错误 C0000:语法错误,令牌"<EOF>"处出现意外$end,并且不确定
- 我该怎么做才能摆脱使用命名空间时的语法错误?
- 如何摆脱错误c2061;语法错误 cout?
- 语法错误:D3DX10Core 中的标识符'TEXTMETRICA'
- 错误 C2146:语法错误:标识符"A1"之前缺少","
- main.cpp(11):错误 C2059:语法错误:"字符串"
- RedisGraph 语法错误在偏移量 8 靠近"创建"
- 如何修复此 FSM C++语法错误 C3867
- 函数错误 C2059:语法错误:'>'不起作用
- 为什么在main()之前断言会导致语法错误"error: expected ')' before numeric constant"?
- c++default-int中的语法错误
- "pip install openexr"上的语法错误:错误的编译器?
- 为什么我收到语法错误:在"*"之前缺少";"
- 错误 C2059:语法错误:从结构成员声明'constant'
- C++语法错误,编译器不会警告或 int v = func(&v) 出错;
- 我正在调试这个C++程序.编译器不再显示语法错误,但存在隐藏的逻辑错误