【问题标题】:OpenSSL with CMake - unknown option: --sysroot when building openSSL带有 CMake 的 OpenSSL - 未知选项:构建 openSSL 时的 --sysroot
【发布时间】: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 应用程序和其他我不感兴趣的东西?

提前感谢您的帮助

【问题讨论】:

    标签: c++ cmake openssl


    【解决方案1】:

    将目标“install_dev”替换为“install”似乎可以解决问题 2)...我将进一步研究步骤 1)的解决方案

    【讨论】:

      【解决方案2】:

      您看到此错误是因为链接器程序“ld”被赋予了它不支持的命令行参数“--sysroot”。您的配置似乎将此命令行参数传递给链接器程序。如果您了解它的作用并禁用此命令行参数,则可以解决问题。

      我不认为让 CMake 选择 clang lld 会解决这个问题,因为“--sysroot”也不是 lld 的命令行参数,据我在这里的手册页中看到:https://linux.die.net/man/1/llvm-ld

      【讨论】:

        猜你喜欢
        • 2014-10-13
        • 2018-10-23
        • 1970-01-01
        • 2017-12-25
        • 1970-01-01
        • 1970-01-01
        • 2020-07-06
        • 1970-01-01
        • 2014-02-23
        相关资源
        最近更新 更多