我正在尝试向Visual Studio 2013添加一个项目,该项目将在Visual Studio GUI中构建OpenSSL。我使用“makefile”项目设置作为起点。
我已经成功地在一个Visual Studio命令行窗口上构建了OpenSSL,并且它是有效的。但是,当我尝试使用与在命令行中完全相同的命令通过项目构建OpenSSL时,会出现链接错误(LNK2001)。
查看带有dumpbin的生成的.lib文件,我发现当我通过GUI构建OpenSSL时,所有导出都会附加一个下划线(“uu”)(因此一个名为BIO_read的函数将变为_BIO_read)。
微软对LNK2001的评价是:https://msdn.microsoft.com/en-us/library/f6xx1b1z.aspx?f=255&MSPPError=-2147217396
具体来说,它说:
当符号未解析时,可以通过以下准则获取有关函数的信息:
在x86平台上,C中编译的名称的调用约定修饰,或者C++中的“C”外部名称的调用约定是:
__cdecl公司
函数具有下划线(u)前缀。
我认为cl是用稍微不同的参数调用的,这些参数使它发出下划线前缀,但是我无法确定到底是什么不同——命令行没有不同,如果环境变量有差异,我找不到相关的变量。
你知道这是怎么回事吗?

最佳答案

通过批处理文件运行生成并从项目属性中的$(NMakePreprocessorDefinitions)字段中删除Preprocessor Definitions,允许我在没有下划线前缀的情况下成功生成OpenSSL。

关于c++ - Visual Studio使用符号的下划线前缀构建OpenSSL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40917002/

10-10 18:14
查看更多