我必须使用该程序Lemur进行一些硬件配置,但是由于从未使用过Linux,因此安装它时遇到了麻烦。我下载了cygwin并运行了./configure,看起来似乎运行良好。当我尝试使用make命令时,即使遇到了类似的问题,也遇到了一些难以解释的问题。
不用说这会在以后尝试make install命令时引起问题。
任何帮助将不胜感激。
这不是大问题。您的代码正在尝试调用未定义的函数computeHash
。可能这意味着您忘记了#include
一些头文件,但是可能还有其他事情。找到声明了.h
的computeHash()
文件并包含它。由于您没有关于编译器找不到文件的任何错误,因此似乎没有丢失/未安装软件的问题。
[Lemur代码依赖于为其构建的gcc / C ++标准版本的一些古怪之处(我相信,是g ++ 4.4)。
这些是我在gcc 7.4下制作lemur-4.12所需的更改。这并不是基于对Lemur代码的任何深刻理解;我只是在记录所做的更改:
大多数更改只需要添加显式强制转换或this->
实用程序/包含/CSet.hpp:63 int idx = this->operator=[](u);
实用程序/包含/ISet.hpp:90 int hashval = this->computeHash(u);
实用程序/包含/ISet.hpp:104 const int hashval = this->computeHash(sn->u);
实用程序/包含/ISet.hpp:105 typename PSet<ObjType>::SET_NODE *snNew = this->createNode(sn->u);
实用程序/包含/ISet.hpp:109 this->deleteNode(sn);
retrieval / src / ResultFile.cpp:134 return (bool)(*inStr >> curQID >> dummy1 >> curDID >> dummy2 >> curSC >> dummy3);
retrieval / src / ResultFile.cpp:136 return (bool)(*inStr >> curQID >> curDID >> curSC);
utility / src / BasicDocStream.cpp:78 moreDoc = (bool)(*ifs >> buf);
将非指针与NULL进行比较。幸运的是,他们评论了他们想做的事情。实用程序/src/WordSet.cpp:42 if (ifstr.fail()) {
对于这两个,他们正在返回false
作为指针; (bool)NULL
为假,所以NULL
等于[[可能的意思。
return NULL;
utility / src / BulkTree.cpp:587 return NULL;
这只是一个错误。他们正在比较指向NUL character
的指针。我怀疑他们是要比较指向NUL的字符,但是如果c == NULL 或 * c =='\ 0'的话,它可能应该停止读取,所以我只是检查了两者。 >parsing / src / OffsetAnnotationAnnotator.cpp:194for ( const char* c = str; i < n && c && *c != '\0'; c++, i++ )
您需要运行make
两次才能构建所有内容。不知道为什么。
export CXXFLAGS='-Wno-write-strings -Wno-deprecated
之前先设置configure
。这些类型的警告太多,无法全部解决,因此它们可能隐藏了更重要的警告。其中显示:可能的问题:\ 0不会存储在qChar中;它只是终止格式字符串。我暂时不做任何处理,因为无论gcc的版本如何,never
的工作方式都不同,因此使用qChar的代码可能不需要多余的\ 0。site-search / cgi / DBInterface.cpp:628sprintf(qChar, "#q1=%s\0", query.c_str());
他们为size_t使用了错误的格式说明符]
site-search / cgi / IndriSearchInterface.cpp:815fprintf(oQueryLog, "(%lu results)\n", (unsigned long)finalResults.size());
compile
所需的更改。完全有可能还取决于未定义的行为,其行为与gcc 5.4下的行为相同。我绝对建议运行configure
时打开--enable-assert。