为什么make命令会出错并如何解决?

时间:2013-11-14 19:08:50

标签: linux makefile cygwin

我必须使用这个程序Lemur一些h.w但我安装它有麻烦,因为我从未使用过Linux。我下载了cygwin并运行了./configure,看起来运行正常。 当我尝试make命令时,我遇到了一些我很难解释的问题,即使在查看了所谓的类似问题之后。 make error on cygwin with Lemur toolkit

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

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

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

utility / include / ISet.hpp:90 int hashval = this->computeHash(u);

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

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

utility / include / 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进行比较。幸运的是,他们评论了他们要做什么。

utility / src / WordSet.cpp:42 if (ifstr.fail()) {

对于这两个,他们正在返回false作为指针; (bool)NULL是错误的,因此NULL可能可能是他们的意思。

utility / src / BulkTree.cpp:571 return NULL;

utility / src / BulkTree.cpp:587 return NULL;

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

parsing / 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。 / strong>

site-search / cgi / DBInterface.cpp:628 sprintf(qChar, "#q1=%s\0", query.c_str());

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

site-search / cgi / IndriSearchInterface.cpp:815 fprintf(oQueryLog, "(%lu results)\n", (unsigned long)finalResults.size());


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