openssl库交叉编译,最详细!
·
最近在学习师兄代码时,拿到源代码,到了我自己的电脑上却不能编译,出现下面错误:
错误显示找不到这个头文件,我在pc上gcc编译可以通过,但是arm-linux上编译不通过;所以查找资料发现要对openss进行交叉编译。
- 首先在官网上下载openssl源码:

-
解压压缩包,进入文件夹中
tar zxvf openssl-1.1.1v.tar.gz
cd openssl-1.1.1v
- 进入到文件夹之后,会发现有这么多文件:

- 查看交叉编译器安装路径 :
终端执行命令:
which arm-linux-gnueabinhf-gcc
查看到arm-linux交叉编译器的路径为:
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc

- 在你解压后的目录下执行命令:
./config no-asm shared no-async --prefix=$(pwd)/install --cross-compile-prefix=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
黑色加粗的是你交叉编译器的路径。
- 执行完上个命令之后,打开makefile 命令:vi Makefile
打开makefile之后,进行如下操作:
然后esc退出: :wq保存 - 最后执行编译命令:
make -j4
make install
编译完成后会出现:
- 最终的编译命令:如图:

如果找不到路径可以使用pwd命令:pwd

- 最后测试代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/md5.h> void md5_hash(const char *input, char *output) { MD5_CTX ctx; unsigned char digest[MD5_DIGEST_LENGTH]; MD5_Init(&ctx); MD5_Update(&ctx, input, strlen(input)); MD5_Final(digest, &ctx); for (int i = 0; i < MD5_DIGEST_LENGTH; i++) { sprintf(&output[i * 2], "%02x", (unsigned int)digest[i]); } } int main() { const char *input = "Hello, MD5!"; char md5_result[MD5_DIGEST_LENGTH * 2 + 1]; // +1 for null-terminator md5_hash(input, md5_result); printf("Input: %s\n", input); printf("MD5 Hash: %s\n", md5_result); return 0; }
最后把文件传给开发板:
最终为:

成功运行!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)