在编译curl-7.60.0时, 遇到ERROR_FILE_NOT_FOUND undeclared 这个情况, 就没法编译成功!!
下载了以往的版本, 发现是从curl-7.59.0版本开始才有 tool_filetime.c, 小弟为了项目进度, 当时选择了使用curl-7.58.0版本的
现在就回过头来研究一下这个问题, 首先, 我们打开tool_filetime.c 这个文件看看其内容, 其中关键的地方是这么一段:
利用Notopad++在curl-7.60.0整个目录下的所有文件搜索 ERROR_FILE_NOT_FOUND
结果会发现只有在tool_filetime.c中的这个位置使用到
这样修改了其中的ERROR_FILE_NOT_FOUND也不会影响到其他地方, 此时再回过头来看看这段代码的代码, 看其中的注释:
1 #if defined(WIN32) && (SIZEOF_CURL_OFF_T >= 8) 2 HANDLE hfile; 3 4 hfile = CreateFileA(filename, FILE_READ_ATTRIBUTES, 5 (FILE_SHARE_READ | FILE_SHARE_WRITE | 6 FILE_SHARE_DELETE), 7 NULL, OPEN_EXISTING, 0, NULL); 8 if(hfile != INVALID_HANDLE_VALUE) { 9 /*调用CreateFileA函数创建文件句柄,此处句柄有效则执行*/ 10 FILETIME ft; 11 if(GetFileTime(hfile, NULL, NULL, &ft)) { 12 curl_off_t converted = (curl_off_t)ft.dwLowDateTime 13 | ((curl_off_t)ft.dwHighDateTime) << 32; 14 15 if(converted < CURL_OFF_T_C(116444736000000000)) { 16 fprintf(error_stream, 17 "Failed to get filetime: underflow\n"); 18 } 19 else { 20 result = (converted - CURL_OFF_T_C(116444736000000000)) / 10000000; 21 } 22 } 23 else { 24 fprintf(error_stream, 25 "Failed to get filetime: " 26 "GetFileTime failed: GetLastError %u\n", 27 (unsigned int)GetLastError()); 28 } 29 CloseHandle(hfile); 30 } 31 else if(GetLastError() != ERROR_FILE_NOT_FOUND) { 32 /*调用CreateFileA函数创建文件句柄,此处句柄无效则执行*/ 33 /*就是文件句柄创建失败了,就执行下面的代码, 输入一个信息*/ 34 fprintf(error_stream, 35 "Failed to get filetime: " 36 "CreateFile failed: GetLastError %u\n", 37 (unsigned int)GetLastError()); 38 } 39 #else
那么上面红框中的代码段, 是否可以修改成如下内容:
保存后, 尝试编译一下:
./configure
make
到此就编译成功了, 运行一下:
ps: 查了一下资料, 在Linux下, ERROR_FILE_NOT_FOUND 应该是 2的 , 所以可以在代码的前面加一个宏
#define ERROR_FILE_NOT_FOUND 2
----2018-6-23