【问题标题】:Cross compile stunnel交叉编译通道
【发布时间】:2026-01-22 03:35:01
【问题描述】:

我在为 ARM 设备交叉编译 stunnel 时遇到困难。 交叉编译 OpenSSL 是通过这个 CMake 项目完成的:http://www.valvers.com/open-software/projects/openssl-cmake/,它在目标设备上成功运行。

我在编译 OpenSSL 时使用的 CMake 工具链文件:

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_C_COMPILER   /home/elias/toolchains/axotec/3.4.1/bin/arm-linux-gcc)
SET(CMAKE_CXX_COMPILER /home/elias/toolchains/axotec/3.4.1/bin/arm-linux-g++)
SET(CMAKE_FIND_ROOT_PATH  /home/elias/toolchains/axotec/3.4.1/arm-linux /home/elias/toolchains/axotec/3.4.1/library-for-ramdisk )
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

我的问题是如何以类似的方式交叉编译 stunnel?我正在努力将 stunnel makefile 传递给整个 sysroot 目录,就像在 cmake 工具链文件中一样 SET(CMAKE_FIND_ROOT_PATH /home/elias/toolchains/axotec/3.4.1/arm-linux /home/elias/toolchains/axotec/3.4.1/library-for-ramdisk )

我的尝试包括,在运行配置后,使用 --sysroot= 重写 makefile CFLAGS,但是将第二个文件夹放在哪里?(library-for-arm)

【问题讨论】:

    标签: linux makefile cmake arm cross-compiling


    【解决方案1】:

    总体思路:

    openssl-cmake 项目使用 CMake 构建基础架构。因此,只需指定适合您的工具链。我查看了 stunnel 源代码,他们使用传统的 GNU Autotools 构建基础设施,这意味着您不能直接在该项目上使用 cmake。 (./configure && make && make install)

    您必须使用 ExternalProject_Add 来使用 cmake 编译 stunnel。 请查看以下链接以获取更多信息。

    还有这个:

    CMakeLists.txt

    cmake_minimum_required (VERSION 3.2)
    include(ExternalProject)
    
    set(CROSS_INFO CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} AR=${CMAKE_AR})
    
    
    ExternalProject_Add(
        stunnel
        URL http://www.stunnel.org/downloads/stunnel-5.17.tar.gz
        CONFIGURE_COMMAND <SOURCE_DIR>/configure --host=powerpc --with-sysroot=${CMAKE_FIND_ROOT_PATH} ${CROSS_INFO}
    )
    

    其他信息: 我尝试在我的系统上本地运行上述项目,最后我花了一个小时使用我拥有的 powerpc 工具链文件对其进行调试。 stunnel 的配置脚本有问题。计算 sysroot 和 with-ssl dir 的方式有点不正确。您可能必须弄乱配置文件才能使交叉编译工作。但大体思路在上面已经说明了。

    【讨论】:

    • 非常感谢您的回答,我一定会调查的