Ubuntu 20.04下MIPS 32交叉编译所需OpenSSL、curl依赖包获取方法咨询
我完全理解你现在的困扰——之前在Ubuntu 20.04的x86机器上交叉编译ARM程序时,通过添加armhf架构就能轻松用apt安装到依赖包,但切换到MIPS32后,不仅apt找不到对应的openssl:mips32这类包,甚至Ubuntu官方软件源里根本没有MIPS32架构的支持,对吧?下面给你几个可行的解决思路:
一、先明确Ubuntu 20.04的架构支持现状
首先得说清楚:Ubuntu 20.04官方软件源仅提供amd64、armhf、arm64、i386、ppc64el、s390x这些主流架构的二进制包,确实不支持MIPS32(包括mips、mipsel),所以你直接用dpkg --add-architecture mips32再apt安装的路子走不通,得换方法。
二、最可靠的方案:从源码交叉编译依赖包
这是嵌入式交叉编译中最常用的方式,能保证依赖版本和你的项目适配:
先安装MIPS32的交叉编译工具链:
sudo apt install gcc-mips-linux-gnu g++-mips-linux-gnu(如果是小端MIPS32,替换为
gcc-mipsel-linux-gnu)交叉编译OpenSSL:
- 下载对应版本的OpenSSL源码(建议和你之前ARM项目用的版本一致),解压后进入源码目录
- 执行配置命令(注意替换工具链前缀和自定义的安装路径):
./Configure linux-mips32 --cross-compile-prefix=mips-linux-gnu- --prefix=/opt/mips32/libs - 编译并安装:
make -j$(nproc) sudo make install
交叉编译curl:
- 下载curl源码,解压后进入目录
- 配置时指定交叉编译主机、安装路径以及依赖的OpenSSL路径:
./configure --host=mips-linux-gnu --prefix=/opt/mips32/libs --with-openssl=/opt/mips32/libs - 编译安装:
make -j$(nproc) sudo make install
编译你的项目时,指定交叉工具链和依赖路径:
在Makefile里添加:CC = mips-linux-gnu-gcc CFLAGS += -I/opt/mips32/libs/include LDFLAGS += -L/opt/mips32/libs/lib -lcurl -lssl -lcrypto
三、备选方案:使用第三方预编译库
有些嵌入式开源项目(比如OpenWrt)会提供MIPS32架构的预编译软件包,你可以找到对应版本的OpenSSL、curl包,解压后把里面的头文件(include目录内容)、库文件(lib目录内容)复制到你的交叉编译环境对应路径下(比如/usr/mips-linux-gnu/include和/usr/mips-linux-gnu/lib)。不过要注意版本兼容性,尽量选和Ubuntu 20.04中依赖版本接近的包,避免编译时出现兼容性问题。
四、额外注意事项
- 如果你的项目用CMake构建,需要设置交叉编译相关变量:
set(CMAKE_C_COMPILER mips-linux-gnu-gcc) set(CMAKE_FIND_ROOT_PATH /opt/mips32/libs) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - 确认交叉编译工具链的版本是否适配MIPS32的指令集,比如有些工具链默认支持MIPS32R2,如果你需要特定版本的指令集,要在编译时添加对应的CFLAGS(比如
-march=mips32r1)。
备注:内容来源于stack exchange,提问作者Karma Yogi

