我试图将项目添加到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会使其发出下划线前缀,但是我无法弄清楚究竟有什么不同 - 命令行没有区别,如果环境变量存在差异我无法找到相关的。
任何想法在这里发生了什么?
答案 0 :(得分:0)
通过批处理文件运行构建并从项目属性中的$(NMakePreprocessorDefinitions)
字段中删除Preprocessor Definitions
,这使我可以成功构建OpenSSL而不使用下划线前缀。