C++ 致命错误:strtok_r.h:没有此类文件或目录(在MinGW中编译tesseract-ocr-3.01时)
我正在用MinGW编译tesseract-ocr-3.01,我得到了这个错误C++ 致命错误:strtok_r.h:没有此类文件或目录(在MinGW中编译tesseract-ocr-3.01时),c++,compiler-errors,mingw,tesseract,C++,Compiler Errors,Mingw,Tesseract,我正在用MinGW编译tesseract-ocr-3.01,我得到了这个错误ambigs.cpp:31:22:致命错误:strok\u r.h:没有这样的文件或目录 这是错误所在的代码: #ifdef WIN32 #ifndef __GNUC__ #define strtok_r strtok_s #else #include "strtok_r.h" #endif /* __GNUC__ */ #endif /* WIN32 */ 编辑 我发现此功能请求已关闭。根据那里的评论: str
ambigs.cpp:31:22:致命错误:strok\u r.h:没有这样的文件或目录
这是错误所在的代码:
#ifdef WIN32
#ifndef __GNUC__
#define strtok_r strtok_s
#else
#include "strtok_r.h"
#endif /* __GNUC__ */
#endif /* WIN32 */
编辑 我发现此功能请求已关闭。根据那里的评论: strtok_r()是可选的POSIX函数,仅用于 支持POSIX线程的实现。MinGW不支持 POSIX螺纹;因此,我认为这个函数没有任何意义 放置在一个基本的MinGW分布中 针对MS Windows的POSIX线程支持由pthreads-win32提供 项目也许他们已经提供了strtok_r()实现。如果 那么,你就可以用它了;如果没有,你可能会要求他们考虑 添加它
通过向项目的源中添加一个,最容易解决此问题:
char *strtok_r(char *str, const char *delim, char **save)
{
char *res, *last;
if( !save )
return strtok(str, delim);
if( !str && !(str = *save) )
return NULL;
last = str + strlen(str);
if( (*save = res = strtok(str, delim)) )
{
*save += strlen(res);
if( *save < last )
(*save)++;
else
*save = NULL;
}
return res;
}
char*strtok\u r(char*str,const char*delim,char**save)
{
char*res,*last;
如果(!保存)
返回strtok(str,delim);
如果(!str&!(str=*保存))
返回NULL;
last=str+strlen(str);
如果((*save=res=strtok(str,delim)))
{
*save+=strlen(res);
如果(*保存<上次)
(*保存)++;
其他的
*save=NULL;
}
返回res;
}
通过向项目源中添加一个,问题最容易解决:
char *strtok_r(char *str, const char *delim, char **save)
{
char *res, *last;
if( !save )
return strtok(str, delim);
if( !str && !(str = *save) )
return NULL;
last = str + strlen(str);
if( (*save = res = strtok(str, delim)) )
{
*save += strlen(res);
if( *save < last )
(*save)++;
else
*save = NULL;
}
return res;
}
char*strtok\u r(char*str,const char*delim,char**save)
{
char*res,*last;
如果(!保存)
返回strtok(str,delim);
如果(!str&!(str=*保存))
返回NULL;
last=str+strlen(str);
如果((*save=res=strtok(str,delim)))
{
*save+=strlen(res);
如果(*保存<上次)
(*保存)++;
其他的
*save=NULL;
}
返回res;
}
事实上,只要将上面的内容粘贴到ambigs.cpp,问题就解决了。事实上,只要将上面的内容粘贴到ambigs.cpp,问题就解决了。