C语言 交叉编译OpenSSH(嵌入式Linux)时出错



到目前为止遵循了许多教程,并出现了各种错误。以下是我遵循的完整分步过程,最终在 OpenSSH 编译中出现错误。

下载 Zlib 并交叉编译($HOME/Desktop/Zlib/zlib-1.2.5/output(

cd /home/armsdk/Desktop/
mkdir zlib
cd Zlib
wget http://www.zlib.net/fossils/zlib-1.2.5.tar.gz
tar xzvf zlib-1.2.5.tar.gz
cd zlib-1.2.5
mkdir output
./configure --prefix=/home/armsdk/Desktop/Zlib/zlib-1.2.5/output CC=arm-cortexa9-linux-gnueabi-gcc 
make
make install

下载OpenSSL并交叉编译:($HOME/桌面/OpenSSL/OpenSSL_CC(

mkdir OpenSSL
cd OpenSSL
wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz
tar xzvf openssl-1.0.1g.tar.gz      
cd openssl-1.0.1g/
export cross=arm-cortexa9-linux-gnueabi-
./Configure dist --prefix=$HOME/Desktop/OpenSSL/OpenSSL_CC
make CC="${cross}gcc" AR="${cross}ar r" RANLIB="${cross}ranlib"
make install

交叉编译的OpenSSH:

./configure --prefix=$HOME/Desktop/OpenSSH/OpenSSH_CC --host=arm --with-libs --with-zlib=$HOME/Desktop/Zlib/zlib-1.2.5/output --with-ssl-dir=$HOME/Desktop/OpenSSL/OpenSSL_CC --disable-etc-default-login CC=arm-cortexa9-linux-gnueabi-gcc AR=arm-cortexa9-linux-gnueabi-ar
make

获取密码错误:

openbsd-compat//libopenbsd-compat.a(xcrypt.o): In function `xcrypt':
/home/armsdk/Desktop/OpenSSH/openssh-5.2p1/openbsd-compat/xcrypt.c:78: undefined reference to `crypt'
collect2: error: ld returned 1 exit status

请帮我解决。我所需要的只是SFTP服务器,用于使用gdbServer进行远程调试(通过Eclipse(


编译系统运行:Debian Wheezy

目标板: 卡罗 TX6S

目标处理器: 恩智浦i.MX6S7

主机 Linux 版本: 3.16.0-0.bpo.4-amd64

目标Linux版本:4.4.0-00118-g26d6b51

CrossCompiler: gcc-arm-cortexa9-linux-gnueabi


更新 1:

添加以下行"给定错误":

-I/home/armsdk/Desktop/OpenSSL/OpenSSL_CC/include

错误

configure: error: unrecognized option: -I/home/armsdk/Desktop/OpenSSL/OpenSSL_CC/include

尝试了这个,但CRYPT错误仍然存在。

--includedir=/home/armsdk/Desktop/OpenSSL/OpenSSL_CC/include

更新 2:

尝试 -lcrypt 标志,如此处建议:未定义对"crypt"的引用 但这没有任何错误变化。

make clean
make -lcrypt

更新3:添加了"CFLAGS=-lcrypt",错误现已更改

./configure --prefix=$HOME/Desktop/OpenSSH/OpenSSH_CC --host=arm --with-libs --with-zlib=$HOME/Desktop/Zlib/zlib-1.2.5/output --with-ssl-dir=$HOME/Desktop/OpenSSL/OpenSSL_CC --disable-etc-default-login CC=arm-cortexa9-linux-gnueabi-gcc AR=arm-cortexa9-linux-gnueabi-ar CFLAGS=-lcrypt

错误

openbsd-compat//libopenbsd-compat.a(xcrypt.o): In function `xcrypt':
xcrypt.c:(.text+0x2c): undefined reference to `crypt'
collect2: error: ld returned 1 exit status
make: *** [sshd] Error 1
更新

4:更新了 LDFLAGS 和 CFLAGS,如下所示:

./configure --prefix=$HOME/Desktop/OpenSSH/OpenSSH_CC --host=arm --with-libs --with-zlib=$HOME/Desktop/Zlib/zlib-1.2.5/output --with-ssl-dir=$HOME/Desktop/OpenSSL/OpenSSL_CC --disable-etc-default-login CC=arm-cortexa9-linux-gnueabi-gcc AR=arm-cortexa9-linux-gnueabi-ar LDFLAGS=-L/home/cross-gcc-4.9.1-2.19-18-armv7a-soft/x86_64-pc-linux-gn‌​‌​u/arm-cortexa9-lin‌​ux‌​-gnueabi/sys-roo‌​t/li‌​b CFLAGS=-lcrypt

问题仍然相同:

openbsd-compat//libopenbsd-compat.a(xcrypt.o): In function `xcrypt':
xcrypt.c:(.text+0x2c): undefined reference to `crypt'
collect2: error: ld returned 1 exit status
make: *** [sshd] Error 1

更新 5:

我终于让它成功"制作"但无法"安装">

./configure --prefix=$HOME/Desktop/OpenSSH/OpenSSH_CC --host=arm --with-libs --with-zlib=$HOME/Desktop/Zlib/zlib-1.2.5/output --with-ssl-dir=$HOME/Desktop/OpenSSL/OpenSSL_CC --disable-etc-default-login CC=arm-cortexa9-linux-gnueabi-gcc AR=arm-cortexa9-linux-gnueabi-ar LDFLAGS='-L/home/cross-gcc-4.9.1-2.19-18-armv7a-soft/x86_64-pc-linux-gn‌​‌​u/arm-cortexa9-lin‌​ux‌​-gnueabi/sys-roo‌​t/li‌​b -lcrypt'
make    
make install

"进行安装"时出错

(umask 022 ; ./mkinstalldirs /var/empty)
/usr/bin/install -c -m 0755 -s ssh /home/armsdk/Desktop/OpenSSH/OpenSSH_CC/bin/ssh
strip: Unable to recognise the format of the input file `/home/armsdk/Desktop/OpenSSH/OpenSSH_CC/bin/ssh'
/usr/bin/install: strip process terminated

更新6:希望最终

所以我终于能够通过添加标志"--禁用条带"来生成输出

./configure --prefix=$HOME/Desktop/OpenSSH/OpenSSH_CC --host=arm --disable-strip --with-libs --with-zlib=$HOME/Desktop/Zlib/zlib-1.2.5/output --with-ssl-dir=$HOME/Desktop/OpenSSL/OpenSSL_CC --disable-etc-default-login CC=arm-cortexa9-linux-gnueabi-gcc AR=arm-cortexa9-linux-gnueabi-ar LDFLAGS='-L/home/cross-gcc-4.9.1-2.19-18-armv7a-soft/x86_64-pc-linux-gn‌​‌​u/arm-cortexa9-lin‌​ux‌​-gnueabi/sys-roo‌​t/li‌​b -lcrypt'
make
make install

不过有一个小问题,我遇到了这个错误:

mkdir /home/armsdk/Desktop/OpenSSH/OpenSSH_CC/etc
./ssh-keygen: 1: ./ssh-keygen: Syntax error: word unexpected (expecting ")")
./ssh-keygen: 1: ./ssh-keygen: Syntax error: word unexpected (expecting ")")
./ssh-keygen: 1: ./ssh-keygen: Syntax error: word unexpected (expecting ")")
make: *** [host-key] Error 2

您需要将-lcrypt添加到LDFLAGS,因为它是传递给链接器(而不是'CFLAGS(的内容。

解决方案是

将 libcrypt 路径添加到编译器,由于某种原因编译器找不到正确的库

LDFLAGS='-L/home/cross-gcc-4.9.1-2.19-18-armv7a-soft/x86_64-pc-linux-gn‌​‌​u/arm-cortexa9-lin‌​ux‌​-gnueabi/sys-roo‌​t/li‌​b -lcrypt'

添加了"--禁用条"以使用安装命令克服STRIP错误

我的最终配置命令如下所示:

./configure --prefix=$HOME/Desktop/OpenSSH/OpenSSH_CC --host=arm --disable-strip --with-libs --with-zlib=$HOME/Desktop/Zlib/zlib-1.2.5/output --with-ssl-dir=$HOME/Desktop/OpenSSL/OpenSSL_CC --disable-etc-default-login CC=arm-cortexa9-linux-gnueabi-gcc AR=arm-cortexa9-linux-gnueabi-ar LDFLAGS='-L/home/cross-gcc-4.9.1-2.19-18-armv7a-soft/x86_64-pc-linux-gn‌​‌​u/arm-cortexa9-lin‌​ux‌​-gnueabi/sys-roo‌​t/li‌​b -lcrypt'
make
make install

感谢@Jakuje,@Gaurav帕塔克和@k_kaz

最新更新