【问题标题】:Error cross compiling OpenSSH (Embedded Linux)交叉编译 OpenSSH(嵌入式 Linux)时出错
【发布时间】:2017-07-24 07:43:53
【问题描述】:

到目前为止,遵循了许多教程并出现了各种错误。以下是我遵循并最终在 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/Desktop/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

请帮我解决。我只需要使用 gdbServer(通过 Eclipse)进行远程调试的 SFTP-Server


在系统运行时编译:Debian Wheezy

目标板:Ka-Ro TX6S

目标处理器:NXP i.MX6S7

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

目标 Linux 版本:4.4.0-00118-g26d6b51

交叉编译器: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 标志:undefined reference to `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:

我终于成功'MAKE'但无法'make install'

./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:希望是最终版

所以我终于能够通过添加标志“--disable-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

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

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

【问题讨论】:

  • 在 Compiler Flags 添加 -lcrypt 标志后,错误现在与 stackoverflow.com/questions/5989444/… 匹配现在不知道该怎么办,上面线程的解决方案是添加 -lcrypt 标志。
  • 您的系统中是否有用于 arm 的 libcrypt 库?我的位于 /usr/arm-linux-gnueabi/ 以及 x86 文件夹下
  • 我在你的例子中没有看到-lcrypt in LDFLAGS
  • 在执行交叉编译安装时也更新 6。您可以使用 install-nokeys 而不是安装它与 check-config 和 host-key 一起安装的位置 check-config 尝试使用 config 运行 sshd 还 host-key as 尝试托管目标目标二进制文件的 rsa/dsa 密钥,这将在主机上失败

标签: c cross-compiling embedded-linux openssh


【解决方案1】:

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

【讨论】:

  • 这确实有效,但由于某种原因我无法生成可执行文件。一旦我能够关闭它,将更新 OP 并回答。 (umask 022 ; ./mkinstalldirs /var/empty) /usr/bin/install -c -m 0755 -s ssh /home/armsdk/Desktop/OpenSSH/OpenSSH_CC/bin/ssh strip: 无法识别输入的格式文件`/home/armsdk/Desktop/OpenSSH/OpenSSH_CC/bin/ssh' /usr/bin/install: 剥离进程异常终止 make: *** [install-files] Error 1
  • 您可能不想在系统中运行install。您安装的二进制文件看起来像是试图从二进制文件中删除调试信息或其他内容,但不知道该怎么做。
  • 如果没有安装命令,我还能如何获得可执行文件?我在这里错过了什么吗?
  • 安装通常只是从某个地方复制到另一个地方。您将在构建目录中找到可执行文件。
【解决方案2】:

解决办法是

将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'

添加了“--disable-strip”以克服安装命令的 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 Pathak 和@k_kaz

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多