交叉编译通道

Cross compile stunnel

我在为 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)

总体思路:

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

您将不得不使用 ExternalProject_Add 来使用 cmake 编译 stunnel。 查看以下链接了解更多信息。

还有这个:

  • Pass parameter with spaces to CMake ExternalProject_Add BUILD_COMMAND

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 目录的方式有点不正确。您可能必须弄乱配置文件才能使交叉编译工作。不过大致思路上面已经说明了。