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

Android NDK编译mysql-connector-cpp遇两类错误求助

编译MySQL Connector/C++ for Android x86_64的两个问题及解决方法

问题1:struct __res_state 类型不完整错误

编译时触发如下错误:

/home/ripper/sources_pck/mysqlcpp/mysql-connector-cpp/cdk/foundation/socket_detail.cc:1097:22: error: variable has incomplete type 'struct __res_state'
 1097 |   struct __res_state state {};
      |                      ^
/home/ripper/sources_pck/mysqlcpp/mysql-connector-cpp/cdk/foundation/socket_detail.cc:1097:10: note: forward declaration of '__res_state'

解决方法

  • 方法一:修改源码补全头文件
    打开cdk/foundation/socket_detail.cc,在文件头部添加头文件引用:
    #include <resolv.h>
    
  • 方法二:补充NDK头文件路径
    若resolv.h位于NDK的x86_64-linux-android子目录下,修改CMake的CMAKE_CXX_FLAGS参数,添加对应路径:
    -DCMAKE_CXX_FLAGS="-I/home/ripper/android-ndk/android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include -I/home/ripper/android-ndk/android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/x86_64-linux-android"
    

问题2:Android版protoc无法在Linux主机执行的错误

编译时出现protoc: not found或依赖错误,原因是预编译的Android版protoc为Android系统专属ELF格式(解释器为/system/bin/linker64),无法在Linux主机环境运行。

解决方法

需分别编译Linux主机版protoc工具和Android x86_64版Protobuf库:

  1. 编译Linux主机版protoc
    下载Protobuf源码后,执行以下命令生成可在Linux运行的protoc:

    mkdir protobuf-host-build && cd protobuf-host-build
    cmake ../protobuf-src \
      -DCMAKE_BUILD_TYPE=Release \
      -Dprotobuf_BUILD_SHARED_LIBS=OFF \
      -Dprotobuf_BUILD_TESTS=OFF \
      -DCMAKE_INSTALL_PREFIX=/home/ripper/sources_pck/protobuf-host
    make -j$(nproc) && make install
    
  2. 编译Android x86_64版Protobuf库
    基于同一Protobuf源码,编译针对Android的库(不生成Android版protoc):

    mkdir protobuf-android-build && cd protobuf-android-build
    cmake ../protobuf-src \
      -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake \
      -DANDROID_ABI=x86_64 \
      -DANDROID_PLATFORM=android-34 \
      -DCMAKE_BUILD_TYPE=Release \
      -Dprotobuf_BUILD_SHARED_LIBS=OFF \
      -Dprotobuf_BUILD_TESTS=OFF \
      -Dprotobuf_BUILD_PROTOC_BINARIES=OFF \
      -DCMAKE_INSTALL_PREFIX=/home/ripper/sources_pck/android_libs/protobuf-android-x86_64
    make -j$(nproc) && make install
    
  3. 更新MySQL Connector/C++的CMake参数
    在原有编译命令基础上,添加指定主机版protoc路径和Android版Protobuf库的参数:

    cmake .. \
      -DCMAKE_C_COMPILER=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/clang  \
      -DCMAKE_CXX_COMPILER=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android34-clang++ \
      -DCMAKE_C_FLAGS="-I/home/ripper/android-ndk/android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include" \
      -DCMAKE_CXX_FLAGS="-I/home/ripper/android-ndk/android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include" \
      -DANDROID_ABI=x86_64 \
      -DANDROID_PLATFORM=android-34 \
      -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake \
      -DCMAKE_INSTALL_PREFIX=/home/ripper/sources_pck/android_libs/mysql-connector-cpp \
      -DWITH_SSL=/home/ripper/sources_pck/android_libs/openssl-3.4.0-android/lib/libssl \
      -DCMAKE_BUILD_TYPE=Release \
      -DWITH_UNIT_TESTS=OFF \
      -DWITH_EXAMPLES=OFF \
      -DWITH_JDBC=OFF \
      # 新增参数
      -Dprotobuf_PROTOC_EXECUTABLE=/home/ripper/sources_pck/protobuf-host/bin/protoc \
      -Dprotobuf_LIBRARY=/home/ripper/sources_pck/android_libs/protobuf-android-x86_64/lib/libprotobuf-lite.a \
      -Dprotobuf_INCLUDE_DIR=/home/ripper/sources_pck/android_libs/protobuf-android-x86_64/include
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:55:03