交叉编译 openssl , libssh2

要使用sftp功能,从网上找了QSsh-master代码在centos上编译,结果qt报错

../../QSsh-master/src/3rdparty/botan/botan.cpp:1127:43: error: impossible constraint in 'asm'

从网上找了没有找到解决办法。就改用libssh2来实现sftp功能在centos6.8上的交叉编译环上编译openssl,执行./configure 失败报错Can't locate IPC/Cmd.pm,百度了下

报错原因:缺少IPC/Cmd.pm模块

解决方法:

安装perl-CPAN,

yum install -y perl-CPAN

嫌弃安装软件麻烦,决定把交叉编译环境整到ubuntu 16 32位上。

新建虚拟机,装好系统 ,安装qt环境,编译一个嵌入式程序测试,报错找不到编译器,我设置了环境变量PATH,但就是报错,又百度,说编译其他平台程序 ,环境变量设置是修改/etc/environment文件,后加入后,终于可以编译了。

接着要交叉编译openssl , libssh2 两个

下载源码,先是编译openssl,

先apt-get install libssl-dev

否则报错configure: error: OpenSSL Crypto library not found

./Configure linux-armv4 --cross-compile-prefix=arm-hisiv400-linux- --prefix=/home/mission/sftp/openssl-3.0.1

第一个linux-armv4是嵌入式平台

--cross-compile-prefix是加上交叉编译的前缀,makefile则会自动变成arm-hisiv400-linux-g++等,

且产生的makefile也是能直接使用。

编译好后,再编译libssh2

./configure  CC=arm-hisiv400-linux-g++ --prefix=/home/mission/sftp/libssh2-1.10.0 指定编译器后,报错 

checking whether we are cross compiling... configure: error: in `/home/mission/sftp/libssh2-1.10.0/libssh2-1.10.0':
configure: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.

后改成./configure  CC=arm-hisiv400-linux-g++ --prefix=/home/mission/sftp/libssh2-1.10.0 --host=arm-linux

又报错

configure: ERROR: No openssl crypto library found!
No libgcrypt crypto library found!
No mbedtls crypto library found!
No wincng crypto library found!

Specify --with-crypto=$backend and/or the neccessary library search prefix.

Known crypto backends: auto, openssl, libgcrypt, mbedtls, wincng
configure: error: Required dependencies are missing!
又改./configure  CC=arm-hisiv400-linux-g++ --prefix=/home/mission/sftp/libssh2-1.10.0 --host=arm-linux --with-libssl-prefix=/home/mission/sftp/openssl-3.0.1

加上了自己编译的openssl的路径,终于好了。

但make时又报错。找不到libatomic.so,把交叉编译环境里的这个库找到放到openssl的库一起,再编译

/opt/hisi-linux/x86-arm/arm-hisiv400-linux/bin/../lib/gcc/arm-hisiv400-linux-gnueabi/4.8.3/../../../../arm-hisiv400-linux-gnueabi/bin/ld: warning: libssl.so.3, needed by ../src/.libs/libssh2.so, not found (try using -rpath or -rpath-link)
/opt/hisi-linux/x86-arm/arm-hisiv400-linux/bin/../lib/gcc/arm-hisiv400-linux-gnueabi/4.8.3/../../../../arm-hisiv400-linux-gnueabi/bin/ld: warning: libcrypto.so.3, needed by ../src/.libs/libssh2.so, not found (try using -rpath or -rpath-link)
../src/.libs/libssh2.so: undefined reference to `EVP_MD_CTX_free@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `EVP_ripemd160@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `EVP_PKEY_derive@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `EVP_PKEY_get1_EC_KEY@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `EVP_PKEY_get1_DSA@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `BIO_ctrl@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `EVP_PKEY_free@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `RSA_get0_factors@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `HMAC_Final@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `EVP_PKEY_CTX_new_id@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `EVP_sha256@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `EVP_DigestSignInit@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `ECDSA_SIG_set0@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `EC_KEY_get0_public_key@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `ENGINE_load_builtin_engines@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `EC_KEY_free@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `BN_mod_exp@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `EC_KEY_new_by_curve_name@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `EVP_PKEY_keygen_init@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `EVP_PKEY_get_raw_private_key@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `EVP_sha1@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `ECDSA_SIG_free@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `EVP_DigestInit@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `RSA_size@OPENSSL_3.0.0'
../src/.libs/libssh2.so: undefined reference to `EVP_PKEY_derive_init@OPENSSL_3.0.0'

参考网上别人的应该是没有加上库路径

又改./configure  CC=arm-hisiv400-linux-gcc --prefix=/home/mission/sftp/libssh2-1.10.0 --host=arm-linux --with-libssl-prefix=/home/mission/sftp/openssl-3.0.1 LDFLAGS="-Wl,-rpath-link,/home/mission/sftp/openssl-3.0.1/lib",终于好了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!要交叉编译 OpenSSL,您需要确保已经设置好适当的交叉编译工具链。以下是一些基本步骤: 1. 下载 OpenSSL 源代码:访问 OpenSSL 官方网站(https://www.openssl.org/source/)下载所需版本的源代码。 2. 解压源代码:将下载的源代码文件解压到您选择的目录中。 3. 设置环境变量:打开终端并设置适当的环境变量,以指向交叉编译工具链。例如,如果您使用的是 ARM 架构的交叉编译工具链,可以设置以下环境变量: ``` export CROSS_COMPILE=arm-linux- export CC=${CROSS_COMPILE}gcc export AR=${CROSS_COMPILE}ar export RANLIB=${CROSS_COMPILE}ranlib ``` 这些变量将根据您的工具链而有所不同,需要根据实际情况进行调整。 4. 配置 OpenSSL:进入 OpenSSL 源代码目录并运行以下命令来配置交叉编译选项: ``` ./Configure <target> --prefix=<install_path> --cross-compile-prefix=<cross_compile_prefix> ``` `<target>` 是要交叉编译的目标平台,例如 `linux-armv4` 或 `linux-x86_64`,`<install_path>` 是要安装编译结果的路径,`<cross_compile_prefix>` 是交叉编译工具链的前缀。 5. 编译和安装:运行以下命令来进行编译和安装: ``` make make install ``` 这将编译 OpenSSL 并将结果安装到指定的路径中。 这是一个基本的交叉编译 OpenSSL 的步骤概述。实际操作中可能会有更多的细节和特定的配置需要根据您的工具链和目标平台进行调整。确保参考 OpenSSL 的文档和交叉编译工具链的文档来获取更详细的指导。希望对您有所帮助!如果您有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值