C++ 在VC 2010上使用SSL的libpq

C++ 在VC 2010上使用SSL的libpq,c++,visual-c++,openssl,postgresql-9.2,libpq,C++,Visual C++,Openssl,Postgresql 9.2,Libpq,我对在支持SSL的windows(VS2010 32和64位)上编译libpq有疑问。 我下载了最新的 还有Win64 v1.0.1c。 我在libpq文件夹中运行了nmake: cd postgresql-9.2.2\interfaces\libpq nmake/f win32.mak CPU=AMD64使用\u SSL=1 SSL\u INC=C:\OpenSSL-Win64\include SSL\u LIB\u PATH=C:\OpenSSL-Win64\LIB 然后编译结束,他找不到b

我对在支持SSL的windows(VS2010 32和64位)上编译libpq有疑问。 我下载了最新的 还有Win64 v1.0.1c。 我在libpq文件夹中运行了nmake:

cd postgresql-9.2.2\interfaces\libpq

nmake/f win32.mak CPU=AMD64使用\u SSL=1 SSL\u INC=C:\OpenSSL-Win64\include SSL\u LIB\u PATH=C:\OpenSSL-Win64\LIB

然后编译结束,他找不到bufferoverflowU.lib。 搜索一下,我发现这个lib是和WindowsSDK一起部署的,因为VS2005不再需要了(请参阅)。 所以在libpq的make文件(win32.mak:20)中,我注释掉了这一行

ADD_SECLIB=bufferoverflowU.lib

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

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

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

干杯, 550

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

不,不再需要了
bufferoverflow.lib
和好友被推入检查堆栈cookie的代码中。请参阅此KB:

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


你应该考虑添加所有讨论的开关。以下是一份列表,以防您的时间紧迫:

  • /GS
  • /萨夫塞
  • /NXCompat
  • /动态数据库
此外,如果可能,您应该
#定义_CRT\u SECURE\u CPP\u OVERLOAD\u STANDARD\u NAMES 1
。最后,您还应该将
#pragma strict_gs_check(on)
添加到Windows上的高风险源文件中。应该谨慎使用,但建议在高风险情况下使用,例如源文件解析来自internet的输入时

通常*nix项目会错过Windows上的安全开关。我称之为“断开连接”,我看到它是双向的(*nix->Windows和Windows->*nix)。不可能每个人都是万事通;)


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

没人知道!?我必须纠正自己:bufferoverflowU.lib只在64位编译(由win32.mak makefile使用标志CPU=AMD64)中请求,而不是在32位编译(CPU=i386)中请求。Postgres是否通过了自检(
make check
)?如果是这样的话,我会说这是不必要的。此外,开发人员也很有帮助。你可以直接与他们打交道。
nmake /f win32.mak CPU=AMD64 USE_SSL=1 SSL_INC=C:\OpenSSL-Win64\include
SSL_LIB_PATH=C:\OpenSSL-Win64\lib