windows - 如何在 Windows 上使用 OpenSSL FIPS 静态库构建 DLL?

标签 windows visual-studio-2010 linker openssl fips

我在 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/

相关文章:

Python 3.6 安装失败

c - 替换 C 中的函数定义

boost - 在Linux上使用Cmake进行 boost (ubuntu)

wpf - 如何只允许管理员关闭 Windows 中的程序

windows - 尝试安装适用于 Python 3.4 的 PyV8 时出现错误

windows - native Windows 脚本的选择

asp.net - 在运行时更改启动页面

c# - 用于方法或属性的 Visual Studio UML 2010 代码生成

visual-studio-2010 - 在Visual Studio 2010中同时将多个项目添加到一个解决方案中

c++ - 引用另一个库的c++静态库的链接器错误