使用ExternalProject_Add编译Android平台google/protobuf失败问题咨询
问题原因及修复方案
核心配置错误点
- 预先定义的
ANDROID_CMAKE_ARGS没有传递给ExternalProject_Add的CMAKE_ARGS参数,导致protobuf子项目无法识别Android交叉编译环境,不会触发对应编译流程 - 没有给你的Native库目标添加对
protobuf-external的依赖,CMake默认不会主动构建未被关联的ExternalProject目标,只会生成目录结构 ExternalProject_Get_Property拼写错误(你写的EXternalProject_Get_Property前两个字母都大写,不符合函数命名规范,会导致源目录路径获取失败)- 缺少protobuf核心编译参数匹配原有bash脚本的配置,比如静态库编译、PIC参数配置等
修正后的CMake配置
set(ANDROID_CMAKE_ARGS -DANDROID_ABI=${ANDROID_ABI} -DANDROID_PLATFORM=${ANDROID_PLATFORM} -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DANDROID_NDK=${ANDROID_NDK} -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} -fPIC -fpie -O3 -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} -fPIC -fpie -O3 -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} -G${CMAKE_GENERATOR}) ExternalProject_Add( protobuf-external PREFIX protobuf URL ${PROTOBUF_TAR_GZ} BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/protobuf # 传入Android编译相关参数 CMAKE_ARGS ${ANDROID_CMAKE_ARGS} "-Dprotobuf_BUILD_TESTS:BOOL=OFF" "-Dprotobuf_BUILD_EXAMPLES:BOOL=OFF" "-Dprotobuf_WITH_ZLIB:BOOL=OFF" # 匹配原bash脚本的静态库编译配置 "-Dprotobuf_BUILD_SHARED_LIBS:BOOL=OFF" SOURCE_SUBDIR cmake BUILD_ALWAYS 1 STEP_TARGETS build INSTALL_COMMAND "" ) # 修正函数拼写错误 ExternalProject_Get_Property(protobuf-external source_dir) include_directories(${source_dir}/src) link_directories(${CMAKE_CURRENT_BINARY_DIR}/protobuf) # 关键配置:给你自己的Native库添加依赖,触发protobuf编译,替换native-lib为你的Native库名 add_dependencies(native-lib protobuf-external) # 链接时增加protobuf库,示例: # target_link_libraries(native-lib protobuf)
内容的提问来源于stack exchange,提问作者user16967562
相关产品推荐
相关产品推荐

