2

我对在支持 SSL 的 Windows(VS2010 32 和 64 位)上编译 libpq 有疑问。我下载了最新的 postgres源以及OpenSSL Win64 v1.0.1c。我在 libpq 文件夹中运行 nmmake:

cd postgresql-9.2.2\interfaces\libpq

nmake /f win32.mak CPU=AMD64 USE_SSL=1 SSL_INC=C:\OpenSSL-Win64\include SSL_LIB_PATH=C:\OpenSSL-Win64\lib

然后编译结束,他找不到bufferoverflowU.lib。搜索了一下我发现,这个库是与 windows SDK 一起部署的,并且由于 VS 2005 不再需要(参见Vista / Win 7 SDK bufferoverflowu.lib 链接错误)。所以在 libpq 的 make 文件 (win32.mak:20) 中我注释掉了这一行

ADD_SECLIB=bufferoverflowU.lib

它编译得很好。我也没有遇到任何麻烦,用 ssl 测试这个 libpq。

我是否需要良心不好从构建中删除 bufferoverflowU.lib 还是仅仅因为 makefile 不适用于 VS 2010?(顺便说一句:openssl 已将 VC 文件夹中的库名称分别更改为 *MD.lib *MT.lib。旧命名的库位于 C:\OpenSSL-Win64\lib 中,一个目录)

有人能告诉我在 VS2010 构建中是否需要 bufferoverflowU.lib 吗?

干杯,550

4

1 回答 1

1

有人能告诉我在 VS2010 构建中是否需要 bufferoverflowU.lib 吗?

不,不再需要了。bufferoverflow.lib和朋友们被推入检查堆栈cookie的代码中。请参阅此 KB:当您使用 Windows Server 2003 Service Pack 1 的 Win32 软件开发工具包 (SDK) 或 Windows Server 2003 驱动程序开发工具包 (DDK) 构建源代码时,您可能会收到“链接器工具错误 LNK2001”错误消息

我相信您可以通过/GS开关解决问题并强化您的可执行文件。


nmake /f win32.mak CPU=AMD64 USE_SSL=1 SSL_INC=C:\OpenSSL-Win64\include
SSL_LIB_PATH=C:\OpenSSL-Win64\lib

您应该考虑添加使用 Visual C++ 防御保护您的代码中讨论的所有开关。以下是您时间紧迫的清单:

  • /GS
  • /SafeSEH
  • /NX 兼容
  • /动态基础

此外,#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1如果可能,您应该这样做。最后,您还应该添加#pragma strict_gs_check(on)到 Windows 上的高风险源文件。它应该谨慎使用,但建议在高风险情况下使用,例如当源文件解析来自 Internet 的输入时。

*nix 项目通常会错过 Windows 上的安全开关。我称之为“断开连接”,我已经看到它是双向的(*nix -> Windows 和 Windows -> *nix)。每个人都不能成为所有方面的专家;)

(对不起,有点徘徊。糟糕的项目设置是我的一个小烦恼)。

于 2013-12-01T03:54:55.553 回答