You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android项目集成SentencePiece遇Protobuf缺失错误,求正确集成方案

SentencePiece集成Android的Protobuf错误修复及正确步骤

修复当前Protobuf找不到的错误

错误根源是SentencePiece依赖Protobuf,直接拷贝源码后CMake无法定位Protobuf的头文件路径,按以下步骤解决:

  • 获取适配Android的Protobuf预编译库或源码,提取头文件和对应ABI的库文件。
  • 在项目的CMakeLists.txt中手动指定Protobuf路径,再执行find_package:
    # 替换为你存放Protobuf头文件的实际路径
    set(Protobuf_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include/protobuf)
    # 替换为对应ABI的Protobuf库文件路径
    set(Protobuf_LIBRARIES ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libprotobuf.so)
    find_package(Protobuf REQUIRED)
    
  • 将Protobuf头文件放入项目src/main/cpp/include目录,库文件放入src/main/jniLibs/${ABI}/目录,确保CMake能识别。

正确集成SentencePiece到Android的两种方法

方法一:使用预编译库

提前交叉编译SentencePiece适配Android的库,步骤如下:

  1. 配置Android NDK交叉编译工具链,指定目标ABI(如arm64-v8a、armeabi-v7a)。
  2. 编译SentencePiece时关联预编译的Protobuf库,生成.so库和头文件。
  3. 将编译好的头文件放入src/main/cpp/include,.so文件放入src/main/jniLibs/${ABI}/。
  4. 在CMakeLists.txt中链接SentencePiece库:
    include_directories(${CMAKE_SOURCE_DIR}/include)
    add_library(sentencepiece SHARED IMPORTED)
    set_target_properties(sentencepiece PROPERTIES
        IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libsentencepiece.so
    )
    # 替换为你的Native库名称
    target_link_libraries(your-native-lib sentencepiece)
    

方法二:CMake自动拉取依赖

利用CMake的FetchContent自动拉取并编译SentencePiece和Protobuf,无需手动拷贝源码:

  1. 在项目的CMakeLists.txt中添加以下配置:
    include(FetchContent)
    
    # 拉取指定版本的Protobuf
    FetchContent_Declare(
        protobuf
        GIT_REPOSITORY https://github.com/protocolbuffers/protobuf.git
        GIT_TAG v3.24.4
    )
    set(protobuf_BUILD_SHARED_LIBS ON)
    set(protobuf_BUILD_TESTS OFF)
    set(protobuf_BUILD_EXAMPLES OFF)
    FetchContent_MakeAvailable(protobuf)
    
    # 拉取指定版本的SentencePiece
    FetchContent_Declare(
        sentencepiece
        GIT_REPOSITORY https://github.com/google/sentencepiece.git
        GIT_TAG v0.1.99
    )
    set(SENTENCEPIECE_BUILD_TEST OFF)
    set(SENTENCEPIECE_BUILD_SHARED_LIBS ON)
    FetchContent_MakeAvailable(sentencepiece)
    
    # 替换为你的Native库名称,链接SentencePiece
    target_link_libraries(your-native-lib sentencepiece::sentencepiece)
    
  2. 确保Android项目使用的CMake版本≥3.11(你的版本3.18.1满足要求),同步项目后CMake会自动完成依赖的编译和集成。

内容的提问来源于stack exchange,提问作者im07

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 21:57:40