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

时间:2016-12-01 17:38:02

标签: c++ c windows 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

具体来说,它说:

  

当符号未解析时,您可以通过以下指南获取有关该功能的信息:

     

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

     

__ CDECL

     

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

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

任何想法在这里发生了什么?

1 个答案:

答案 0 :(得分:0)

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