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

构建Android版Qt Base时无法找到OpenSSL等依赖库的问题

Android Qt Base 构建依赖查找失败问题排查与解决

问题描述

尝试构建Android版Qt Base,已定义环境变量并手动编译了Freetype、Harfbuzz、OpenSSL、SDL等依赖库,但构建Qt Base时持续出现CMake依赖查找错误。

环境变量定义

INSTALLDIR="$1"
if [ "${INSTALLDIR:0:1}" != "/" ]; then
    INSTALLDIR="$PWD/$INSTALLDIR"
fi

# Set Android NDK and target architecture
ANDROID_SDK_PATH="/home/swami/Android/Sdk/"
ANDROID_NDK_PATH="/home/swami/Android/Sdk/ndk/29.0.13113456/"
ANDROID_API_LEVEL=21  # Adjust this to your target API level
ANDROID_ARCH="arm64-v8a"  # Change this to your desired architecture (e.g., armv7a, x86, etc.)

export ANDROID_SDK=$ANDROID_SDK_PATH
export ANDROID_NDK=$ANDROID_NDK_PATH
export ANDROID_API=$ANDROID_API_LEVEL
export ANDROID_ARCH=$ANDROID_ARCH

Qt Base构建脚本

echo "Building Qt Base..."
rm -fr "qtbase-everywhere-src-$QT"
tar xf "qtbase-everywhere-src-$QT.tar.xz"
cd "qtbase-everywhere-src-$QT"
mkdir build-host
cd build-host
../configure -developer-build -nomake tests -nomake examples
cmake --build . --target host_tools
cd ..
mkdir build
cd ./build
# Configure Qt for Android
../configure -prefix "$INSTALLDIR" \
    -release \
    -android-ndk "$ANDROID_NDK" \
    -android-sdk "$ANDROID_SDK" \
    -android-abis "$ANDROID_ARCH" \
    -qt-host-path "../build-host" \
    -qt-doubleconversion \
    -ssl -openssl-runtime \
    -opengl es2 \
    -no-dbus \
    -no-xcb \
    -no-gtk \
    -xkbcommon \
    -- -DFEATURE_dbus=OFF \
       -DFEATURE_icu=OFF \
       -DFEATURE_printsupport=OFF \
       -DFEATURE_sql=OFF \
       -DFEATURE_system_png=ON \
       -DFEATURE_system_jpeg=ON \
       -DFEATURE_system_zlib=ON \
       -DFEATURE_system_freetype=ON \
       -DFEATURE_system_harfbuzz=ON
cmake --build . --parallel
ninja install
cd ../../

依赖库编译脚本

echo "Building Freetype..."
git clone https://gitlab.freedesktop.org/freetype/freetype.git
cd freetype
./autogen.sh
./configure --prefix="$INSTALLDIR" \
     --host=arm-linux-androideabi \
     --build=x86_64-linux-gnu \
     --with-android-ndk=$ANDROID_NDK\
     --with-zlib=yes \
     --with-png=yes \
     --with-harfbuzz=no

make && make install
cd ..

echo "Building Harfbuzz..."
git clone https://github.com/harfbuzz/harfbuzz.git
cd harfbuzz
cmake -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_PATH/build/cmake/android.toolchain.cmake \
    -DANDROID_ABI=arm64-v8a \
    -DANDROID_NATIVE_API_LEVEL=21 \
    -DCMAKE_PREFIX_PATH="$INSTALLDIR" \
    -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" \
    -DBUILD_SHARED_LIBS=ON \
    -Dcoretext=disabled \
    -Dfreetype=enabled \
    -Dglib=disabled \
    -B build \
    -G Ninja 
cmake --build build --parallel
ninja -C build install
cd ..

git clone https://github.com/openssl/openssl.git
cd openssl
git checkout openssl-3.2.2
./Configure android-arm64 no-shared \
    -D__ANDROID_API__=$ANDROID_API \
    --prefix="$INSTALLDIR" \
    --with-zlib-include="$INSTALLDIR/include" \
    --with-zlib-lib="$INSTALLDIR/lib"
make -j$(nproc) SHLIB_VERSION_NUMBER= SHLIB_EXT=_1_1.so build_libs
make install
cd ..

echo "Building SDL..."
rm -fr "$SDL"
tar xf "$SDL.tar.gz"
cd "$SDL"
cmake -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_PATH/build/cmake/android.toolchain.cmake \
    -DANDROID_ABI=arm64-v8a \
    -DANDROID_NATIVE_API_LEVEL=21 \
    -DCMAKE_PREFIX_PATH="$INSTALLDIR" \
    -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" \
    -DBUILD_SHARED_LIBS=ON \
    -DSDL_SHARED=ON \
    -DSDL_STATIC=OFF \
    -B build \
    -G Ninja 
cmake --build build --parallel
ninja -C build install
cd ..

错误信息

CMake Error at cmake/QtBuildInformation.cmake:534 (message):
  Feature "openssl_runtime": Forcing to "ON" breaks its condition:

      TEST_opensslv11_headers OR TEST_opensslv30_headers

  Condition values dump:

      TEST_opensslv11_headers = "FALSE"
      TEST_opensslv30_headers = "FALSE"

Call Stack (most recent call first):
  cmake/QtFeature.cmake:322 (qt_configure_add_report_error)
  cmake/QtFeature.cmake:442 (qt_feature_check_and_save_internal_value)
  cmake/QtFeature.cmake:141 (qt_evaluate_feature)
  cmake/QtFeature.cmake:180 (qt_internal_evaluate_config_expression)
  cmake/QtFeature.cmake:396 (qt_evaluate_config_expression)
  cmake/QtFeature.cmake:711 (qt_evaluate_feature)
  cmake/QtBaseGlobalTargets.cmake:109 (qt_feature_module_end)
  cmake/QtBaseHelpers.cmake:186 (include)
  CMakeLists.txt:32 (qt_internal_qtbase_build_repo)


CMake Error at cmake/QtBuildInformation.cmake:534 (message):
  Feature "system_freetype": Forcing to "ON" breaks its condition:

      QT_FEATURE_freetype AND WrapSystemFreetype_FOUND

  Condition values dump:

      QT_FEATURE_freetype = "ON"
      WrapSystemFreetype_FOUND = "FALSE"

Call Stack (most recent call first):
  cmake/QtFeature.cmake:322 (qt_configure_add_report_error)
  cmake/QtFeature.cmake:442 (qt_feature_check_and_save_internal_value)
  cmake/QtFeature.cmake:141 (qt_evaluate_feature)
  cmake/QtFeature.cmake:180 (qt_internal_evaluate_config_expression)
  cmake/QtFeature.cmake:396 (qt_evaluate_config_expression)
  cmake/QtFeature.cmake:711 (qt_evaluate_feature)
  cmake/QtFeature.cmake:680 (qt_feature_module_end)
  src/CMakeLists.txt:13 (qt_feature_evaluate_features)


CMake Error at cmake/QtBuildInformation.cmake:534 (message):
  Feature "system_harfbuzz": Forcing to "ON" breaks its condition:

      QT_FEATURE_harfbuzz AND WrapSystemHarfbuzz_FOUND

  Condition values dump:

      QT_FEATURE_harfbuzz = "ON"
      WrapSystemHarfbuzz_FOUND = "FALSE"

解决方案

1. OpenSSL 检测失败修复

  • 问题根源:Qt无法识别已编译的OpenSSL 3.2.2头文件,且-openssl-runtime参数与静态编译的OpenSSL不匹配。
  • 修复步骤:
    • 将Qt configure中的-ssl -openssl-runtime替换为-ssl -openssl-linked(因编译的是静态OpenSSL库no-shared)。
    • 在configure的--后追加CMake参数:-DOPENSSL_ROOT_DIR=$INSTALLDIR,明确指定OpenSSL路径。
    • 验证$INSTALLDIR/include/openssl下存在完整头文件,$INSTALLDIR/lib下有libcrypto.a和libssl.a。

2. system_freetype 找不到修复

  • 问题根源:Freetype编译时指定的--host=arm-linux-androideabi对应32位ARM架构,与目标arm64-v8a不匹配,导致Qt无法找到64位库。
  • 修复步骤:
    • 重新编译Freetype,将configure的--host参数改为aarch64-linux-android:
      ./configure --prefix="$INSTALLDIR" \
           --host=aarch64-linux-android \
           --build=x86_64-linux-gnu \
           --with-android-ndk=$ANDROID_NDK\
           --with-zlib=yes \
           --with-png=yes \
           --with-harfbuzz=no
      
    • 在Qt configure的CMake参数中添加-DFreetype_ROOT=$INSTALLDIR,帮助Qt定位库文件。

3. system_harfbuzz 找不到修复

  • 问题根源:Harfbuzz编译时未正确关联同架构的Freetype,或Qt无法自动识别Harfbuzz路径。
  • 修复步骤:
    • 确保Freetype已编译为arm64-v8a架构并安装到$INSTALLDIR后,重新编译Harfbuzz。
    • 在Qt configure的CMake参数中添加-DHarfbuzz_ROOT=$INSTALLDIR。
    • 验证$INSTALLDIR/lib下存在libharfbuzz.so(或静态库),且架构为arm64-v8a。

通用注意事项

  • 所有依赖库必须与Qt目标架构完全一致(arm64-v8a),禁止混合32位/64位库。
  • 每次修改配置后,清理Qt的build目录再重新configure,避免CMake缓存干扰。
  • 确保$INSTALLDIR路径下的include、lib目录权限正常,Qt构建进程可访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:14:57