交叉编译openssh出现错误Makefile:548: recipe for target 'install_sw' failed

本文介绍了解决OpenSSH交叉编译时出现的错误,特别是在编译openssl阶段遇到的问题及解决方案,避免将安装目录配置为源码目录。

交叉编译openssh出现错误

将OpenSSH移植到ARM Linux,交叉编译openssh时,在第二步编译openssl时,make install出现如下错误:

cp: 'e_os2.h' and '/home/word/iTOP-4412-Linux-ssh/openssl-1.0.2l/include/openssl/e_os2.h' are the same file
Makefile:548: recipe for target 'install_sw' failed
make: *** [install_sw] Error 1

如下图:

make insta 错误

这个错误主要是在配置文件时,将安装目录配置到了源码目录下:

$ cd ../openssl-1.0.1l
$ ./Configure --prefix=/home/veryarm/ssh/openssl.install  os/compiler:arm-none-linux-gnueabi-gcc
$ make
$ make install

也就是上面的/home/veryarm/ssh/openssl.install安装目录,不要填写成 ../openssl-1.0.1l目录,这样ok了。

具体交叉编译操作可参考OpenSSH移植到ARM Linux教程

<think>我们正在交叉编译OpenSSH,在安装阶段(make install)时遇到了strip错误错误信息为: 'strip: Unable to recognise the format of the input file' '/usr/bin/install: strip process terminated abnormally' 原因分析:在安装过程中,make install会尝试使用宿主机的strip工具(通常是/usr/bin/strip)去剥离(strip)交叉编译生成的二进制文件(这些文件是MIPS大端架构的)。而宿主机的strip工具无法识别目标平台的二进制格式,因此报错。 解决方案:我们需要告诉安装过程使用交叉编译工具链中的strip工具(如mips-linux-gnu-strip)来替代宿主机的strip。根据引用[1]中提到的经验,有两种方法可以解决: 方法一:修改Makefile中的STRIP_OPT选项(推荐) 在OpenSSHMakefile中,默认的STRIP_OPT选项可能是`-s`,这会导致安装时调用宿主机的strip。我们可以修改为指定交叉编译的strip程序。 步骤: 1. 在OpenSSH源码目录下,打开Makefile(如果已经配置并编译过,则这个Makefile已经存在)。 2. 搜索`STRIP_OPT`,找到类似下面这行: ``` STRIP_OPT=-s ``` 将其修改为: ``` STRIP_OPT=-s --strip-program=$(CROSS_COMPILE)strip ``` 其中`$(CROSS_COMPILE)`是我们在交叉编译时设置的环境变量,代表交叉编译工具链的前缀(如`mips-linux-gnu-`)。这样,在安装时就会使用`mips-linux-gnu-strip`来剥离二进制文件。 注意:如果我们在配置OpenSSH时已经设置了`--disable-strip`,那么就不会执行strip操作,但这样生成的二进制文件会比较大。因此,我们更希望使用正确的strip工具。 方法二:在运行make install时通过命令行参数指定 在运行make install时,我们可以通过给install命令传递参数来指定strip程序,但OpenSSHMakefile并没有直接提供这样的选项。因此,我们可以在make install时覆盖STRIP_OPT变量,如下: ```bash make install STRIP_OPT="-s --strip-program=${CROSS_COMPILE}strip" ``` 方法三:使用configure选项(如果支持) 在配置OpenSSH时,我们可以尝试使用`--enable-strip`并指定strip程序,但OpenSSH的configure脚本并没有直接提供指定strip程序的选项。因此,我们只能通过修改Makefile或make install命令行来解决。 根据引用[1]的经验,我们采用修改Makefile的方法。 具体操作步骤: 1. 确保已经配置好交叉编译环境(包括CC、AR等环境变量),并且已经成功编译OpenSSH(make命令已经通过)。 2. 在OpenSSH源码目录中,用文本编辑器打开Makefile。 3. 搜索`STRIP_OPT`,找到类似以下的行: ``` STRIP_OPT ?= -s ``` 或者 ``` STRIP_OPT = -s ``` 将其修改为: ``` STRIP_OPT = -s --strip-program=$(CROSS_COMPILE)strip ``` 注意:如果之前已经设置了`?=`,那么我们可以直接覆盖它。 4. 保存Makefile。 5. 运行`make install`,此时应该会使用交叉编译工具链中的strip程序。 验证:观察安装过程中的输出,应该不再出现关于strip的错误。 另外,如果我们在配置OpenSSH时已经添加了`--disable-strip`,那么就不会执行strip操作,也就不会报错。但是,如果我们希望减少生成的二进制文件大小,则应该使用正确的strip工具,而不是完全禁用strip。 注意:在交叉编译环境中,我们通常希望剥离二进制文件以减小体积,因此使用交叉编译工具链中的strip是必要的。 如果上述方法仍然不行,我们可以尝试在安装前手动剥离二进制文件,然后禁用安装时的strip步骤,但这样比较麻烦。 因此,推荐使用方法一(修改Makefile)来解决问题。 最后,根据引用[2],我们可能还需要注意目标平台上的配置文件(如sshd_config)的路径设置,但这与编译过程无关,属于部署时的配置。 总结步骤(针对OpenSSH交叉编译安装): 1. 配置和编译OpenSSH(make)成功。 2. 修改Makefile中的STRIP_OPT,指定交叉编译的strip工具。 3. 运行make install,完成安装。 这样,我们就解决了strip错误的问题。</think>### 解决 OpenSSH 交叉编译中的 strip 错误 当在 MIPS 大端平台交叉编译 OpenSSH 时遇到以下错误: ``` strip: Unable to recognise the format of the input file /usr/bin/install: strip process terminated abnormally ``` 这是因为在 `make install` 阶段,系统错误地使用了**主机系统的 strip 工具**(如 `/usr/bin/strip`)处理 MIPS 架构的二进制文件。以下是具体解决方案: --- ### 解决方法(两种可选方案) #### 方案一:修改 Makefile(推荐) 1. **定位 Makefile**: ```bash cd /path/to/openssh-source vim Makefile ``` 2. **修改 STRIP_OPT 参数**: 找到包含 `STRIP_OPT` 的行(通常在文件开头),修改为: ```makefile STRIP_OPT = -s --strip-program=$(CROSS_COMPILE)strip ``` 例如,若您的工具链前缀是 `mips-linux-gnu-`,则改为: ```makefile STRIP_OPT = -s --strip-program=mips-linux-gnu-strip ``` 3. **保存并重新安装**: ```bash make install ``` #### 方案二:通过命令行覆盖参数 直接在执行安装命令时指定参数: ```bash make install STRIP_OPT="-s --strip-program=mips-linux-gnu-strip" ``` --- ### 完整修复流程(含交叉编译步骤) 1. **设置工具链环境变量**: ```bash export CROSS_COMPILE=mips-linux-gnu- export CC=${CROSS_COMPILE}gcc export STRIP=${CROSS_COMPILE}strip # 关键:确保使用正确的 strip ``` 2. **配置 OpenSSH**(显式禁用默认 strip): ```bash ./configure \ --host=mips-linux-gnu \ --with-zlib=/path/to/zlib \ --with-ssl-dir=/path/to/openssl \ --prefix=/install/path \ --disable-strip # 禁用内置 strip 逻辑 ``` 3. **编译并安装**: ```bash make make install STRIP_OPT="-s --strip-program=${CROSS_COMPILE}strip" ``` --- ### 关键原理说明 1. **问题根源**: OpenSSH 的 `install` 目标默认使用主机系统的 strip 工具处理二进制文件,而主机工具无法识别 MIPS 架构的 ELF 格式[^1]。 2. **解决方案核心**: `--strip-program` 参数显式指定**交叉编译工具链中的 strip 工具**,确保: - 使用正确的架构处理器(`mips-linux-gnu-strip`) - 保持二进制文件的可执行性 3. **备选方案**: 若仍遇到问题,可尝试完全禁用 strip: ```bash make install STRIP_OPT="" ``` 但会导致二进制文件体积增大(约增加 30%-50%)。 --- ### 验证安装 检查目标平台的二进制文件格式: ```bash # 在 MIPS 设备上执行 file /usr/local/sbin/sshd # 正确输出应包含:ELF 32-bit MSB executable, MIPS... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值