vs2013编译libimobiledevice,错误记录

姜建德
2023-12-01

1. static inline int vasprintf 中,报错: 在"inline"之后应输入"("的错误:

原因:Visual Studio2013中的C编译器还不支持inline语法,在VC中,仍然需要用微软自己定义的__inline,而尚不支持inline,尽管inline在C++中是支持的。

解决:添加代码:

 #ifdef _MSC_VER
#define inline    __inline
#endif

2. access(unique_filename, F_OK) 报错,F_OK未识别的标识符;

原因:

在Linux下,access函数的声明在<unistd.h>文件中,声明如下:

int access(const char *pathname, int mode);

在Windows下没有access函数,但在<io.h>文件中有_access函数,声明如下:

int _access(const char* _Filename, int _AccessMode);

解决:使用_access替换access,声明相应的F_OK等:

#ifndef _MSC_VER
#include <unistd.h>
#else
#include <io.h>
#define access    _access
#define F_OK    00
#define R_OK    04
#define W_OK    02
#define X_OK    06
#endif

3. “sockaddr”: “struct”类型重定义的错误:

现象:

windows.h和winsock2.h存在有类型重定义,往往体现在VC程序中包含winsock2.h时出现编译错误:

error C2011: “sockaddr_in”:“struct”类型重定义

解决:

在项目属性中,c/c++中的预处理器设置中,添加 WIN32_LEAN_AND_MEAN 的宏定义;

 类似资料: