curl、openssl、mbedtls的交叉编译过程

一、前言

cURL是一个利用URL语法在命令行下工作的文件传输工具,在Linux系统中常被用来下载或上传文件。curl需依赖openssl或者mbedtls这两个加密库,可以根据实际需要选择其一。本文主要记录如何交叉编译这3个库,使之能运行在嵌入式Linux设备上。

二、环境介绍

宿主机:Ubuntu 18.04.6 LTS 64位

目标机:32位 mips架构 君正T41N

交叉编译器:mips-linux-uclibc-gcc

curl版本:curl-7.58.0

openssl版本:openssl-1.0.0h

mbedtls版本:mbedtls-2.4.2

三、编译openssl和mbedtls

1.准备工作

关于上述3个库的源码,网上一搜一大把,这里不再赘述如何下载。将下载好的源码解压到宿主机Linux系统内。先创建三个目录,用来存放交叉编译生成的库,后续会用到这些目录。目录名字自己取,方便找就行:

/home/user_test/lib_mips_install/openssl-1.0.0h
/home/user_test/lib_mips_install/mbedtls-2.4.2
/home/user_test/lib_mips_install/curl-7.58.0

2.编译openssl

执行以下命令生成Makefile:

cd openssl-OpenSSL_1_0_0h/
./config no-asm shared no-async --prefix=/home/user_test/lib_mips_install/openssl-1.0.0h --cross-compile-prefix=mips-linux-uclibc-

--prefix就是预设的库文件安装路径,填写上一步中创建的目录。这里不能填宿主机系统的/lib目录,因为生成的库文件是交叉编译来的,不能在PC机上使用。

修改生成的Makefile:
PLATFORM=mips
删除文件中所有的-m64

执行以下命令,编译和安装:

make
make install

此时编译生成的库文件就被拷贝到了--prefix指定的目录下。

3.编译mbedtls

执行以下命令编译和安装mbedtls:

cd mbedtls-2.4.2
mkdir _build
cd _build
CC=mips-linux-uclibc-gcc cmake -DUSE_SHARED_MBEDTLS_LIBRARY=On ../ -DCMAKE_INSTALL_PREFIX=/home/user_test/lib_mips_install/mbedtls-2.4.2
make
make install

同样的,通过-DCMAKE_INSTALL_PREFIX指定预设安装目录,选择上面步骤创建的目录。注意要检查系统是否装了cmake工具,一般新装的系统很有可能没有默认带cmake,导致编译失败。上述命令执行成功后,在预设目录下可以看到编译好的mbedtls库文件。

四、编译curl

curl加密依赖库可以选openssl,也可以选mbedtls。我这里为了举例,把两种方式都进行了一遍。

1.依赖openssl-1.0.0h的curl

执行以下命令,编译和安装:

cd curl-7.58.0
./configure --host=mips-linux --target=mips-linux CC=mips-linux-uclibc-gcc CXX=mips-linux-uclibc-g++ --prefix=/home/user_test/lib_mips_install/curl-7.58.0 --with-ssl=/home/user_test/lib_mips_install/openssl-1.0.0h --enable-shared --enable-static --disable-threaded-resolver
make
make install

其中,--with-ssl=/home/user_test/lib_mips_install/openssl-1.0.0h选项指定curl依赖的加密库名称和路径,这个路径填写之前安装openssl的路径。

2.依赖mbedtls-2.4.2的curl

执行如下命令生成编译脚本:

cd curl-7.58.0
./configure --host=mips-linux  --target=mips-linux  CC=mips-linux-uclibc-gcc  --prefix=/home/user_test/lib_mips_install/curl-7.58.0 --with-mbedtls=/home/user_test/lib_mips_install/mbedtls-2.4.2 --enable-shared

其中, --with-mbedtls=/home/user_test/lib_mips_install/mbedtls-2.4.2选项指定curl依赖的加密库名称和路径,这个路径填写之前安装mbedtls的路径。执行这个命令过程中,我遇到了如下的报错:

checking for recv... no
configure: error: Unable to link function recv

网上关于这个问题的资料寥寥无几,只能大致知道可能与zlib的依赖有关,倒腾了半天也没解决。最后是通过更换了编译器的版本解决的。建议遇到类似的问题,可以试试降低或升高编译器的版本。执行成功后,可以看到如下信息:

可以看到编译器已经找到并识别了mbedtls库。在编译之前,还需要vi src/Makefile,252行修改为:
CCLD = $(CC) -lmbedcrypto -lmbedtls -lmbedx509 

再执行编译和安装:

make 
make install

成功后可以看到在安装目录下的bin/目录下的可执行程序curl,和lib/目录下的用于编程的库文件。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Linux下使用curl进行交叉编译,首先需要安装相关的交叉编译工具链。根据目标平台选择适当的工具链,如ARMMIPS等。然后,下载curl的源代码包并解压。 进入curl源码目录后,可以配置编译参数。使用./configure命令,通过指定交叉编译工具链的位置和参数,来进行交叉编译的配置。例如: ``` ./configure --host=交叉编译工具链的前缀 ``` 其中,"--host"参数后面跟的是经过交叉编译工具链前缀,如arm-linux-gnueabi、mips-linux-gnu等。这样配置之后,就可以使用交叉编译器来编译curl了。 配置完成后,运行make命令进行编译。编译完成后,即生成了交叉编译后的curl可执行文件。 最后,将生成的可执行文件拷贝到目标平台上进行运行测试即可。 总结起来,通过安装交叉编译工具链、配置编译参数,以及使用make命令进行编译,就可以在Linux下完成curl交叉编译。 ### 回答2: 在Linux系统下,交叉编译是指在一台主机上用特定工具链编译生成适用于另一种主机架构的可执行程序。对于curlLinux下的交叉编译,以下是一些步骤: 首先,我们需要设置交叉编译环境。这包括安装交叉编译工具链和交叉编译的目标架构的头文件与库。 然后,我们需要下载curl的源代码。可以从curl的官方网站下载最新版本的源代码。 接下来,我们需要根据交叉编译工具链的要求配置curl的编译选项。这可能涉及到指定目标架构、链接选项、头文件和库的路径等。 然后,我们可以运行configure命令来生成适用于交叉编译环境的Makefile。configure命令会根据主机架构、编译选项等自动配置Makefile。 接着,我们可以运行make命令进行编译。make命令会根据Makefile中的指令来编译生成可执行程序。在编译过程中,可能会出现一些依赖问题需要解决,比如缺少某些库文件。 最后,我们可以运行make install命令将编译生成的可执行程序安装到目标机器中。 需要注意的是,根据交叉编译工具链和目标架构的不同,具体的交叉编译过程可能会有所差异。因此,在进行交叉编译前,建议阅读相关文档或参考其他资源,以便更好地理解和掌握交叉编译的步骤和注意事项。 ### 回答3: 在Linux下进行curl交叉编译,需要以下几个步骤: 1. 安装交叉编译工具链:首先需要在Linux系统中安装适合目标平台的交叉编译工具链。根据目标平台的不同,可以选择不同的工具链,例如gcc、g++等。 2. 下载curl源代码:从curl的官方网站上下载最新的curl源代码包,并解压到本地。 3. 配置交叉编译环境:打开终端,进入解压后的curl源代码目录下,执行以下命令: ``` export CC=交叉编译器路径 export CXX=交叉编译器路径 export AR=交叉编译器路径-ar export RANLIB=交叉编译器路径-ranlib export LD=交叉编译器路径-ld export STRIP=交叉编译器路径-strip export CPPFLAGS="-I交叉编译器路径/include" export LDFLAGS="-L交叉编译器路径/lib" ``` 替换上述命令中的“交叉编译器路径”为实际的交叉编译工具链路径。 4. 配置编译选项:执行以下命令配置编译选项: ``` ./configure --host=目标平台 --prefix=安装路径 ``` 其中,目标平台是指要将curl交叉编译到的目标硬件平台,安装路径是指将编译后的curl安装到的目录。根据实际的需求进行配置。 5. 编译和安装:执行以下命令开始编译和安装: ``` make make install ``` 编译过程可能需要一些时间,等待编译完成后,curl将被安装到指定的安装路径下。 通过以上步骤,我们可以在Linux下成功进行curl交叉编译。在配置交叉编译环境时,需要注意交叉编译器的选择和路径的配置,确保编译工具链已正确安装,并设置正确的编译选项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值