gpt4 book ai didi

cmake - 使用未声明的标识符 '_ISspace'

转载 作者:行者123 更新时间:2023-12-05 07:21:20 32 4
gpt4 key购买 nike

我正在尝试使用 android-ndk-r20 为 android 构建 C 库。我正在使用 CMake 构建我的库。

架构是android-arm64

问题是我在编译过程中遇到了以下错误:

/home/erez/android-ndk-r20/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__locale:382:32: error: use of undeclared identifier '_ISspace'

同样的错误适用于所有类型的宏 - _ISprint_IScntrl

我试图在谷歌中查找它,但没有提到这个宏,这很奇怪。

当我打开这个文件时,我确实看到了这个宏的一些用法。

我试图查找它,但找不到任何定义此宏的地方。这让我感到困惑,因为我假设 nkd/LLVM 将包含所有需要的头文件和库,但我无法在任何地方找到这个头文件。

这是我的 CMake 命令:

cmake -DCMAKE_CXX_FLAGS:STRING="-std=c++11" -DANDROID_NATIVE_API_LEVEL=24 -DTARGET=android -DANDROID_ABI=arm64-v8a -DLIBRARY_OUTPUT_PATH_ROOT=pwd/../android_output -DCMAKE_TOOLCHAIN_FILE=pwd/../../../../../android-ndk-r20/build/cmake/android.toolchain.cmake -DBUILD_DATE=$(date +%Y-%m-%d) ../../rootCmake ; make VERBOSE=1 install ;

有人知道我该如何解决这个问题吗?

编辑:

根 CMakeLists.txt:

project(Osn)
cmake_minimum_required(VERSION 2.8)

set(TARGET "android" CACHE STRING "Set the target ios mac32/64, linux32/64, android, win32/64")

# Static link the c++ library in case of a gcc compiler.
if (CMAKE_COMPILER_IS_GNUCC)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/gcc_config.cmake)
endif()

if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/darwin.cmake)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/linux.cmake)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/msvc_config.cmake)
#elseif(${CMAKE_SYSTEM_NAME} MATCHES "iOS")
# include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/ios-arm.cmake)
endif()

if (${TARGET} MATCHES "android")
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/android.cmake)
endif()

add_subdirectory(OsnClient/OsnClient)

#if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "iOS")
add_subdirectory(OsnClientApp/OsnClientApp)
#endif()

srcs CMakelists.txt:

project(ProjectName)
cmake_minimum_required(VERSION 2.8)

set(OSN_ROOT ${CMAKE_CURRENT_SOURCE_DIR})
set(OSN_INCLUDE ${OSN_ROOT}/../../../include)
set(OSNCLIENT_EXPORTS on)


set(gabro_files ${CMAKE_CURRENT_SOURCE_DIR}/../../../gabro/${TARGET} )
if (${TARGET} MATCHES android)
set(gabro_files ${CMAKE_CURRENT_SOURCE_DIR}/../../../gabro/${TARGET}-${ANDROID_ABI} )
endif()


if (${CMAKE_SYSTEM_NAME} MATCHES Windows)
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}
/NODEFAULTLIB:libboost_date_time-vc100-mt-s-1_47.lib
....
....
/VERBOSE:LIB
")
endif()

add_definitions(-DGABRO_WIN32_API_STATIC)

set(src
${OSN_ROOT}/src1.cpp
${OSN_ROOT}/src2.cpp
)

include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
${OSN_ROOT}
${gabro_files}/include
${OSN_INCLUDE}
)

if (${TARGET} MATCHES android)
set(log_lib ${ANDROID_NDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-${ANDROID_ARCH_NAME}/usr/lib )
endif()

link_directories(
${gabro_files}/lib
)


set(link_libs gabro_client_api_static)

if (WIN32)
list(APPEND link_libs gabro_static_external-mt wininet )
elseif (${CMAKE_SYSTEM_NAME} MATCHES Darwin)
list(APPEND link_libs gabro_static_external pthread z dl)
elseif (${TARGET} MATCHES android)
list(APPEND link_libs gabro_static_external libOsnClient.so log)
else()
list(APPEND link_libs gabro_static_external pthread dl rt)
endif()

if (${CMAKE_SYSTEM_NAME} MATCHES "ios")
add_library(${PROJECT_NAME} STATIC ${src})
else()
add_library(${PROJECT_NAME} SHARED ${src})
endif()

target_link_libraries(${PROJECT_NAME} ${link_libs} )

install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)

clang++ --version:

Android (5220042 based on r346389c) clang version 8.0.7 (https://android.googlesource.com/toolchain/clang b55f2d4ebfd35bf643d27dbca1bb228957008617) (https://android.googlesource.com/toolchain/llvm 3c393fe7a7e13b0fba4ac75a01aa683d7a5b11cd) (based on LLVM 8.0.7svn) Target: x86_64-unknown-linux-gnu Thread model: posix

最佳答案

确保您没有定义__GLIBC__。 Android 未使用 glibc。

来自有问题的文件 __locale:

class _LIBCPP_TYPE_VIS ctype_base
{
public:
#if defined(__GLIBC__) // <-- Here's the problem
typedef unsigned short mask;
static const mask space = _ISspace;
static const mask print = _ISprint;
static const mask cntrl = _IScntrl;
static const mask upper = _ISupper;
...
}

关于cmake - 使用未声明的标识符 '_ISspace',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56951331/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com