1

我必须将这个程序 Lemur 用于某些硬件,但我在安装它时遇到了麻烦,因为我从未使用过 Linux。我下载了 cygwin 并运行了看起来运行良好的 ./configure。当我尝试 make 命令时,我遇到了一些我很难解释的问题,即使是在环顾四周假设的类似问题之后也是如此。
使用 Lemur 工具包在 cygwin 上出错

不用说,当我稍后尝试 make install 命令时,这会导致问题。

任何帮助将不胜感激。

4

2 回答 2

0

这不是制造问题。您的代码正在尝试调用computeHash未定义的函数。这可能意味着您忘记了#include某些头文件,但也可能是其他内容。找到声明的.h文件computeHash()并包含它。由于您没有关于编译器找不到文件的任何错误,因此这似乎不是缺少/未安装软件的问题。

于 2013-11-14T19:29:11.767 回答
0

Lemur 代码依赖于它所构建的 gcc/C++ 标准版本的一些怪癖(我相信是 g++ 4.4)。

这些是我在 gcc 7.4 下制作 lemur-4.12 所需的更改。这不是基于对 Lemur 代码的任何深刻理解;我只是在进行更改时记录更改:

大多数更改只需要添加显式强制转换或this->s

实用程序/include/CSet.hpp:63 int idx = this->operator=[](u);

实用程序/include/ISet.hpp:90 int hashval = this->computeHash(u);

实用程序/include/ISet.hpp:104const int hashval = this->computeHash(sn->u);

实用程序/include/ISet.hpp:105typename PSet<ObjType>::SET_NODE *snNew = this->createNode(sn->u);

实用程序/include/ISet.hpp:109this->deleteNode(sn);

检索/src/ResultFile.cpp:134return (bool)(*inStr >> curQID >> dummy1 >> curDID >> dummy2 >> curSC >> dummy3);

检索/src/ResultFile.cpp:136return (bool)(*inStr >> curQID >> curDID >> curSC);

实用程序/src/BasicDocStream.cpp:78moreDoc = (bool)(*ifs >> buf);

将非指针与 NULL 进行比较。幸运的是,他们评论了他们正在尝试做的事情。

实用程序/src/WordSet.cpp:42if (ifstr.fail()) {

对于这两个,它们false作为指针返回;(bool)NULL是假的,所以可能NULL是他们的意思。

实用程序/src/BulkTree.cpp:571return NULL;

实用程序/src/BulkTree.cpp:587return NULL;

这只是一个错误。他们正在比较指向 NUL字符的指针。我怀疑他们打算比较它指向 NUL 的字符,但是因为如果 c == NULL*c == '\0' 它可能应该停止读取,我只是让它检查两者。

解析/src/OffsetAnnotationAnnotator.cpp:194 for ( const char* c = str; i < n && c && *c != '\0'; c++, i++ )

您需要运行make两次才能构建所有内容。不知道为什么。


我还建议export CXXFLAGS='-Wno-write-strings -Wno-deprecated在运行前设置configure。这些类型的警告太多,无法全部修复,而且它们可能隐藏了更严重的警告。这揭示了:

可能的问题: \0 不会存储在 qChar 中;它只是终止格式字符串。我暂时不理会它,因为无论 gcc 的版本如何,它的工作方式都不会有所不同,因此使用 qChar 的代码可能不需要额外的 \0 存在。

站点搜索/cgi/DBInterface.cpp:628sprintf(qChar, "#q1=%s\0", query.c_str());

他们对 size_t 使用了错误的格式说明符

站点搜索/cgi/IndriSearchInterface.cpp:815fprintf(oQueryLog, "(%lu results)\n", (unsigned long)finalResults.size());


请注意,这些只是使其编译所需的更改。它完全有可能还取决于未定义的行为,其行为方式与 gcc 5.4 下的行为方式相同。我绝对建议在运行时打开 --enable-assert configure

于 2020-01-03T16:58:05.903 回答