【发布时间】:2019-11-29 07:52:00
【问题描述】:
我正在使用 CMake 脚本为 Android 平台交叉编译 openSSL 1.1.1,因为它是我在构建应用程序时必须使用的其他库的依赖项。所以,我必须通过 ExternalProject 模块命令启动一个外部子构建,使用正确的命令运行 OpenSSL 自己的构建系统。最终的命令如下所示:
ExternalProject_Add(openssl
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/openssl
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}
#INSTALL_DIR
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E echo "Starting custom configure"
COMMAND export ANDROID_NDK_HOME=@CMAKE_ANDROID_NDK@
COMMAND CC=clang;AR=@CMAKE_AR@;RANLIB=@CMAKE_RANLIB@;PATH=${OPENSSL_COMPILER_PATH}:${PERL_PATH}
COMMAND ANDROID_NDK_HOME=@CMAKE_ANDROID_NDK@;CC=clang;AR=@CMAKE_AR@;RANLIB=@CMAKE_RANLIB@;PATH=${OPENSSL_COMPILER_PATH}:${PERL_PATH};<SOURCE_DIR>/Configure ${ARCH} no-shared ${CONFIGURE_COMMAND_DEFINITIONS} -I${CMAKE_CURRENT_SOURCE_DIR}/openssl/ -I${CMAKE_CURRENT_SOURCE_DIR}/openssl/include -I@CMAKE_ANDROID_NDK@/sysroot/usr/include -I@CMAKE_ANDROID_NDK@/sysroot/usr/include/${ARCH_INCLUDE_DIR} --prefix=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@ --openssldir=$@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@ --libdir=""
BUILD_COMMAND export ANDROID_NDK_HOME=@CMAKE_ANDROID_NDK@
COMMAND PATH=${OPENSSL_COMPILER_PATH}:${PERL_PATH}:/bin
COMMAND ANDROID_NDK_HOME=@CMAKE_ANDROID_NDK@;PATH=${OPENSSL_COMPILER_PATH}:${PERL_PATH}:/bin;${MAKE_EXECUTABLE} -j8 build_libs
INSTALL_COMMAND ${MAKE_EXECUTABLE} -j8 install_sw
STEP_TARGETS build install
)
构建步骤可以,但是构建安装目标时出现如下提示错误:
ld: unknown option: --sysroot=/platforms/android-21/arch-arm
在创建 libcrypto 和 libssl 后发出错误,并且脚本正在尝试将它们链接到它正在创建的 opensSSL 应用程序。所以: 1)关于如何解决问题的任何提示?我认为它使用 GNU ld 而不是 Clang lld 链接到 Android SDK 2)有没有办法配置 OpenSSL 脚本(特别是我正在考虑基于我们正在编译的系统生成 Makefile 的模板),以便不安装 OpenSSL 应用程序和其他我不感兴趣的东西?
提前感谢您的帮助
【问题讨论】: