编译RFC2617的C程序时链接md5.h库遇错误求助
搞定RFC 2617 digcalc.c编译的头文件缺失问题
嘿,我之前折腾过RFC示例代码的编译,正好碰到过类似的问题,给你梳理下解决办法:
关于global.h的替换
你把<global.h>换成<stddef.h>的思路完全没问题!RFC示例里的global.h一般就是用来定义size_t、NULL这类通用基础类型的,而标准库的<stddef.h>刚好提供这些定义,这一步踩对了。
解决<md5.h>找不到的难题
接下来的md5.h报错,是因为示例代码默认你已经有MD5算法的实现头文件,这里有两个靠谱的解决方向:
用系统自带的MD5库(最省心)
大部分类Unix系统(Linux、macOS)都自带了MD5的实现,只要替换头文件并调整编译命令就行:- 如果你用Linux:把
<md5.h>改成<openssl/md5.h>,编译的时候要链接OpenSSL库,命令改成这样:gcc digtest.c digcalc.c -o digtest -lcrypto - 如果你用macOS:系统自带CommonCrypto库,把
<md5.h>换成<CommonCrypto/CommonDigest.h>,而且这个库的MD5函数(MD5_Init、MD5_Update、MD5_Final)和示例代码的调用方式完全兼容,直接编译就行:gcc digtest.c digcalc.c -o digtest
- 如果你用Linux:把
手动添加MD5实现(更贴合RFC示例)
如果你的系统没有现成的MD5库,或者想完全遵循RFC的实现逻辑,可以找一份RFC 1321里的官方MD5 C代码(这是MD5的标准实现),把对应的头文件和源文件加到你的项目里,然后把digcalc.c里的#include <md5.h>改成你新增的MD5头文件路径就行。
额外要注意的小细节
- 替换完头文件后,记得检查digcalc.c里的MD5函数调用是否和你用的库接口一致,个别情况下可能需要微调参数;
- 如果出现“未定义引用”的错误,大概率是没链接对应的库或者漏加了实现文件,仔细核对编译命令和文件依赖就行。
内容的提问来源于stack exchange,提问作者Andriy Makukha
相关产品推荐
相关产品推荐

