我在 openssl-users 邮件列表中询问了这个问题,但没有得到回复,所以我想我会在这里尝试。
我正在尝试构建一个包含静态 OpenSSL FIPS 库的 Windows DLL。我使用 perl Configure fips --with-fipslibdir=... -no-shared
构建了 FIPS 库,然后使用 nmake -f ms\nt.mak
。我使用的是 openssl-fips-2.0.5、openssl-1.0.1j 和 MS Visual Studio 2010。
现在我正在尝试将生成的库链接到我的 DLL 中。我已按照 OpenSSL FIPS 2.0 User's Guide 中的说明进行操作,设置一堆环境变量(FIPS_LINK、FIPS_CC、FIPS_CC_ARGS 等),然后调用 fipslink.pl
。但是我遇到了“第一阶段链接失败”。
它报告“完整性检查正常”,然后编译 fips_premain.c,但是在链接 DLL 时,我收到一堆“本地定义的符号 _time64 导入”警告(以及 strncmp、_errno、abort、fprintf 等) ,然后是一些未解析的外部符号,包括:
__imp_strncpy
__imp_qsort
__imp_wcsstr
__imp_vsnwprintf
所有错误都来自 libeayfips32.lib、libeaycompat32.lib 和 ssleay32.lib。
我尝试过添加和删除诸如 /NODEFAULTLIB:msvcrt
和 /NODEFAULTLIB:libcmtd
之类的东西,并使用 /MT
进行构建或 /MD
或两者都不是,但我每次都会收到链接器错误。我错过了什么?
最佳答案
我推测配置脚本的“-no-shared”开关静态链接了 C 标准库。您将获得静态 OpenSSL FIPS 库,但它会包括 printf 和 friend 的实现,正如您实际体验的那样。
关于windows - 如何在 Windows 上使用 OpenSSL FIPS 静态库构建 DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27409996/