最近在学习师兄代码时,拿到源代码,到了我自己的电脑上却不能编译,出现下面错误:

错误显示找不到这个头文件,我在pc上gcc编译可以通过,但是arm-linux上编译不通过;所以查找资料发现要对openss进行交叉编译。

  1. 首先在官网上下载openssl源码:


     
  2. 解压压缩包,进入文件夹中

    tar zxvf openssl-1.1.1v.tar.gz

    cd openssl-1.1.1v 

  3.  进入到文件夹之后,会发现有这么多文件:
  4. 查看交叉编译器安装路径 :                                                                                                        

      终端执行命令:

      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

                              
  5.     在你解压后的目录下执行命令:
    ./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- 
    黑色加粗的是你交叉编译器的路径。    
  6. 执行完上个命令之后,打开makefile  命令:vi Makefile
    打开makefile之后,进行如下操作:

    然后esc退出:  :wq保存
  7. 最后执行编译命令:
    make -j4     
    make install
    编译完成后会出现:
  8. 最终的编译命令:如图:

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

  9. 最后测试代码:
    #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;
    }

 最后把文件传给开发板:

最终为:

 成功运行!

Logo

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

更多推荐