事情起源于想基于openssl的源码编译自己写的一个调用API的简单程序,结果在m_sha1.c:init()函数中报“undefined reference to `SHA1_Init'”的错误(并不是所有openssl源码的文件都添加到我的项目中了,我的想法是尽量只使用我的自己写的程序所必需的文件),我立即在源码中搜索SHA1_Init()函数的实现,结果根本找不到。附带说一下,我使用的源码分析工具是微软的Visual Studio Express 2013 for Windows Desktop和Linux下的find命令(主要是“find . -name '*.c" -exec grep 'pattern' /dev/null '{}' \+”命令——*.c可以修改为其他类型文件)。通过这两种方式,只能找到SHA1_Init()的声明,实现却是死活找不着。没办法只好网上搜索一下,还好,也找到两个线索,分别是这么说的:
线索1 --
SHA1_Init is indeed defined in sha_locl.h as HASH_INIT, whereas
SHA1_Update and SHA1_Final are defined in md32_common.h (under crypto
folder) as HASH_UPDATE and HASH_FINAL respectively.
线索2 --
> Many OpenSSL functions are implemented in non-traditional manners,
> such as
> via macro's, assembly language, etc.
>
> If you are on a Unix/Linux platform, using something like "nm -o
> li