Visual Studio使用下划线前缀为符号构建OpenSSL

我正在尝试向Visual Studio 2013中添加一个项目,该项目将在Visual Studio GUI中构建OpenSSL。 我正在使用“makefile”项目设置作为起点。

我已经成功地在Visual Studio命令行窗口上构建OpenSSL,并且它可以工作。 但是,当我尝试使用我在命令行中使用的完全相同的命令通过项目构建OpenSSL时,我得到链接错误(LNK2001)。

使用dumpbin查看生成的.lib文件,我看到当我通过GUI构建OpenSSL时,下划线(’_’)会附加到所有导出(因此,一个名为BIO_read的函数将变为_BIO_read )。

微软有关于LNK2001的说法: https ://msdn.microsoft.com/en-us/library/f6xx1b1z.aspx ? f = 255 & MSPPError = -2147217396

具体来说,它说:

当符号未解析时,您可以通过以下准则获取有关该function的信息:

在x86平台上,用C编译的名称或C ++中的extern“C”名称的调用约定装饰是:

__cdecl

函数具有下划线(_)前缀。

我认为使用稍微不同的参数调用cl会使它发出下划线前缀,但我无法弄清楚究竟有什么不同 – 命令行没有区别,如果环境变量存在差异,我找不到一个相关的。

有什么想法在这里发生了什么?

通过批处理文件运行构建并从项目属性中的Preprocessor Definitions字段中删除$(NMakePreprocessorDefinitions) ,允许我成功构建OpenSSL而不使用下划线前缀。