vs基于hiredis.lib生成可执行文件/dll

这个问题记录一下,因为耽误了我2个小时。

之前是基于CMake去生成的工程,如下:

vs基于hiredis.lib生成可执行文件/dll_第1张图片

 生成工程后,编译工程没有问题。

今天因为有个其它的工程,临时需要使用redis去做个验证,因此就在原有工程项目基础上,直接添加文件。主要就是添加了一个客户端的cpp,还有就是win32fixes.c。结果编译没有问题,但是链接总是失败,找不到_replace_setsockopt和_strerror_r。我看了源码,但是实际上这两个函数在win32fixes.c中已经定义了的。所以,说是未定义,不合乎情理。最后原因出在,win32fixes.c的编译选项,需要将属性->c/c++->高级->编译为,改为编译为C代码,如下所示:

vs基于hiredis.lib生成可执行文件/dll_第2张图片

 改完后,链接就没有问题。但是为什么,这明明是C文件,VS为将其编译为C++代码呢?实在是不理解。

至于CMake生成的工程,为什么没有问题,我看了一下,因为CMake生成vcxproj文件中,对于添加的文件,描述如下:

vs基于hiredis.lib生成可执行文件/dll_第3张图片

 win32fixes.c是CompileAsC,所以是没有问题的。

网上还有说是未连接Win32_Interop.lib导致的,实际我碰到的这种情形,和它也没有关系。

你可能感兴趣的:(windows,c++,c语言)