2013-08-03 74 views
0

我希望这不是一个编程问题的关键Q &论坛,但我有麻烦编译这个程序,这对我来说非常重要。在linux上编译cddplus

http://www.inf.ethz.ch/personal/fukudak/cdd_home/ ,并从那里最新的CDD + -077a.tar.gz ...

简单make all(如README建议)产量:

g++ -O3 -I -I/usr/local/include -I. -DGMP -DRATIONAL -c -o cdd_r.o cdd.C 
In file included from ./Rational.h:19:0, 
      from cddtype.h:16, 
      from cdd.C:38: 
./Integer.h:779:28: Fehler: »INT_MAX« wurde in diesem Gültigkeitsbereich nicht definiert 
./Integer.h:780:30: Fehler: »INT_MAX« wurde in diesem Gültigkeitsbereich nicht definiert 
In file included from cddtype.h:16:0, 
      from cdd.C:38: 
./Rational.h: In Funktion »std::basic_ostream<char, _Traits>&  operator<<(std::basic_ostream<char, _Traits>&, const Rational&)«: 
./Rational.h:1181:35: Fehler: es gibt keine Argumente für »strlen«, die von einem Templateparameter abhängen, weshalb eine Deklaration von »strlen« verfügbar sein muss [- fpermissive] 
./Rational.h:1181:35: Anmerkung: (mit »-fpermissive« wird G++ den Code akzeptieren, aber die Verwendung eines nicht deklarierten Namens ist veraltet) 
cdd.C: In Funktion »void DDEnumerate(std::ostream&, std::ostream&)«: 
cdd.C:197:49: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
cdd.C:204:55: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
cdd.C:211:49: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
cdd.C:219:55: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
cdd.C: In Funktion »void DDRowDecomposition(std::ostream&, std::ostream&)«: 
cdd.C:260:53: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
cdd.C:301:47: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
cdd.C:308:53: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
cdd.C:315:47: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
cdd.C: In Funktion »void PreProjection(std::ostream&, std::ostream&)«: 
cdd.C:356:69: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
cdd.C:422:49: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
cdd.C:429:55: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
cdd.C:436:49: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
cdd.C: In Funktion »void PostAnalysisMain(std::ifstream&, std::ostream&)«: 
cdd.C:522:49: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
cdd.C:529:55: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
cdd.C:536:49: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
cdd.C:544:55: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
cdd.C: In Funktion »int main(int, char**)«: 
cdd.C:794:39: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
cdd.C:797:56: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
cdd.C:806:45: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings] 
make: *** [cdd_r.o] Fehler 1 

是什么意思呢?是文件本身损坏(我高度怀疑)是我的设置错误(我正在运行Ubuntu 13.04)还是有什么我不知道?

我会很感激,如果有人能在正确的方向点我...

+0

我的猜测是,它不是很便携的代码,它依赖于一些非标准的编译器行为。 – Thomas

+0

它看起来像你缺少一些标题。例如,'INT_MAX'在C语言中的''中定义,在C++中定义在''中。 – juanchopanza

+0

是的,你可能是对的,但文件cstdint存在于我的计算机的'/ usr/include/C++/4.7/cstdint'中,这是我用来编译这个东西的编译器。所以这个问题似乎在makefile中 – wa4557

回答

1

我如下解决了这个问题:

第一:添加以下的整数开始的。 H:

#define __STDC_LIMIT_MACROS 
#include <stdint.h>` 

第二:

替换INT_MAXINT32_MAX(这是在线路779和780),因为在stdint.h (usr/include),只需要定义INT32_MAX而不是INT_MAX

以上更改可能只是解决第一个问题,即约INT_MAX

之后,你会遇到strlenmemcopy的问题,那么你可以通过在相关文件中添加“string.h”来解决这个问题,也许是Rational.h和其他人,我忘了。