【问题标题】:Tesseract function with no implementation没有实现的 Tesseract 函数
【发布时间】:2011-10-17 19:59:56
【问题描述】:

我正在尝试在 Visual Studio 以外的其他工具中使用 Tesseract 创建一个项目,但似乎没有任何文档说明如何执行此操作。

我现在遇到的问题是文件 scanutils.cpp 调用了一个函数 open(char *, int, mode_t) 并且它没有在任何地方定义。这可能是一个 Unix 函数从我的机器上溜走或应该位于我机器上的某个地方吗?

谢谢。

编辑:我发现 open 函数包括在 Unix 中使用 fcntl.h 文件,但我拥有的版本(C++ Builder)不包括 open 函数。我可以像在 Unix 中一样在自己的文件中定义 open 函数,但这似乎有点鲁莽。有什么建议吗?

【问题讨论】:

    标签: c++ function implementation tesseract


    【解决方案1】:

    在 Microsoft 工具中,函数 open() 被替换为 _open(),在 io.h 中定义。 Here (MSDN)你可以找到更多关于它的信息。

    【讨论】:

      【解决方案2】:

      open() 是一个 Posix 函数,通常将 open 系统调用包装在符合要求的系统中。这是一个相当“低级”的功能,非常特定于平台。

      提供等效功能的可移植C函数是fopen(),在某种意义上open()的结果与FILE * fp = fopen(...); int fd = fileno(fp);相同——这里fd是底层open()返回的整数打电话。

      顺便说一下,标准 C 函数 fwrite()fread() 映射到 Posix 函数 read()write()

      尽量坚持使用标准 C 函数和FILE* 数据结构,以获得最大的可移植性。如有必要,您始终可以通过fileno() 获取 Posix 文件描述符。

      【讨论】:

      • 优秀。谢谢你。该代码使用了 O_CREATE、O_TRUNC 和 O_WRONLY 标志,我相信 fopen 默认情况下也是如此。
      • @user912447:不完全是。 fopen() 有一组标准的标志(您可以在手册中查找),它们对应某些open 标志。但是open 为各种特定于 Posix 的行为提供了一组更大、更精细的标志。再次检查手册,man 2 open
      【解决方案3】:

      open() 是一个标准的 UNIX 函数。

      【讨论】:

      • 在 Windows 中没有实现?我问是因为通常只有 unix 的 tesseract 代码由 #ifdef 包装并提供 Windows 替代方案。否则它不会在我知道的 Visual Studio 中编译。
      猜你喜欢
      • 1970-01-01
      • 2016-11-20
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 2012-02-25
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多