编译-openssl交叉编译问题

最近在编译openssl-1.1.0f的时候,执行config以后,会提示

target already defined - linux-x86_64 (offending arg: linux-x86_64)


或者在config通过以后,编译的时候提示

cc1: error: unrecognized command line option "-m64"

目前找到两种解决办法

方法一

1、执行config命令

./Configure --prefix=$(pwd)/output shared no-asm linux-armv4

目前目标平台可支持目前支持的包括

BS2000-OSD BSD-generic32 BSD-generic64 BSD-ia64 BSD-sparc64 BSD-sparcv8
BSD-x86 BSD-x86-elf BSD-x86_64 Cygwin Cygwin-i386 Cygwin-i486 Cygwin-i586
Cygwin-i686 Cygwin-x86 Cygwin-x86_64 DJGPP MPE/iX-gcc OS390-Unix QNX6
QNX6-i386 UEFI UWIN VC-CE VC-WIN32 VC-WIN64A VC-WIN64A-masm VC-WIN64I aix-cc
aix-gcc aix64-cc aix64-gcc android android-armeabi android-mips android-x86
and

### 解决 OpenSSL-3.4.1 交叉编译时 `-m64` 不被识别的问题 #### 1. 错误的根本原因 在 ARM 架构下的交叉编译工具链中,`arm-rockchip830-linux-uclibcgnueabihf-gcc` 是专为 ARM 设计的编译器。然而,`-m64` 参数是用于 x86_64 架构上的选项,表示生成 64 位代码。由于 ARM 和 x86_64 属于不同的架构体系,ARM 编译器自然无法解析该选项[^4]。 #### 2. 配置阶段移除 `-m64` OpenSSL 的构建过程依赖其自身的 `Configure` 或 `config` 脚本,在此期间会自动生成 Makefile 文件。如果未正确指定目标平台或编译器前缀,可能会引入不必要的选项(如 `-m64`)。以下是具体的解决方案: ##### (1) 使用正确的配置命令 确保在调用 OpenSSL 的 `Configure` 脚本时指定了适当的目标平台以及交叉编译器前缀。例如: ```bash ./Configure linux-generic32 --prefix=/path/to/install --cross-compile-prefix=arm-rockchip830-linux-uclibcgnueabihf- ``` 这里的关键参数解释如下: - **`linux-generic32`**: 表示为目标系统是一个基于 Linux 的 32 位 ARM 平台。 - **`--prefix`**: 指定安装路径。 - **`--cross-compile-prefix`**: 明确告知 OpenSSL 使用哪个交叉编译器前缀。 ##### (2) 替代方案:手动编辑生成的 Makefile 即使通过上述方式仍可能出现残留的 `-m64` 参数,此时可借助 `sed` 命令批量替换相关内容。操作步骤如下: ```bash sed -i 's/-m64//g' Makefile ``` 这条命令的作用是从 Makefile 中全局删除所有 `-m64` 字符串[^4]。 #### 3. 添加必要的编译器标志 为了更好地适配 ARM 平台,建议向 CFLAGS 和 LDFLAGS 中添加一些针对性更强的选项。例如: ```makefile export CFLAGS="-O2 -Wall -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp" export LDFLAGS="-L/path/to/libs" ``` 这些附加标记能够显著提升程序性能并优化浮点数运算能力[^3]。 #### 4. 清理旧有构建产物后再重试 为了避免先前失败记录影响当前进程,请务必先执行清理动作再继续后续工作流: ```bash make clean make depend make ``` 以上三步依次完成源码清理、依赖关系重建及正式编译任务。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值