在VC 2010上使用SSL的libpq

libpq with SSL on VC 2010

本文关键字:SSL libpq VC 2010      更新时间:2023-10-16

在支持SSL的windows(VS2010 32和64位)上编译libpq时遇到问题。我下载了的最新来源postgres以及OpenSSL Win64 v1.0.1c。我在libpq文件夹中运行了nmake:

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=缓冲区溢出U.lib

并且编译良好。使用ssl测试这个libpq时,我也没有遇到任何问题。

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

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

干杯,550

有人能告诉我VS2010版本中是否需要bufferoverflowU.lib吗?

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

我相信您可以通过/GS开关消除这个问题并强化您的可执行文件。


nmake /f win32.mak CPU=AMD64 USE_SSL=1 SSL_INC=C:OpenSSL-Win64include
SSL_LIB_PATH=C:OpenSSL-Win64lib

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

  • /GS
  • /安全SEH
  • /NXCompat
  • /DynamicBase

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

*nix项目错过Windows上的安全开关是很常见的。我称之为"断开连接",我看到它是双向的(*nix->Windows和Windows->*nix)。不可能每个人都是无所不知的专家;)

(很抱歉有点走神。糟糕的项目设置是我最讨厌的)。