Le code C dans la bibliothèque (bibliothèque/Linpack et bibliothèque/recettes) compile bien en utilisant:
gcc -c *.c
Le code C++ est plus problématique. Il y a des en-têtes dans ../include et ils requièrent -DANSI pour produire des prototypes de fonctions. Ils ne sont pas déclarés extern "C"
dans les en-têtes; ils sont correctement inclus dans les en-têtes dans la source C de dir:
extern "C" {
#include "linpack.h"
}
Ainsi, la compilation A3dStream.C, je reçois:
$ g++ -DANSI -I../include -c A3dStream.C
In file included from /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/backward/iostream.h:31,
from Hh.h:12,
from A3dStream.C:4:
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/backward/backward_warning.h:32:2:
warning: #warning This file includes at least one deprecated or antiquated header.
Please consider using one of the 32 headers found in section 17.4.1.2 of the C++
standard. Examples include substituting the <X> header for the <X.h> header for
C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable
this warning use -Wno-deprecated.
In file included from A3dStream.C:4:
Hh.h:15:23: strstream.h: No such file or directory
In file included from A3dStream.C:4:
Hh.h:45: error: declaration of C function `void bzero(void*, int)' conflicts with
/usr/include/string.h:54: error: previous declaration `void bzero(void*, size_t)' here
Hh.h:46: error: declaration of C function `int gethostname(char*, int)' conflicts with
/usr/include/sys/unistd.h:206: error: previous declaration `int gethostname(char*, size_t)' here
Hh.h:98: error: an explicit specialization must be preceded by 'template <>'
Hh.h:105: error: an explicit specialization must be preceded by 'template <>'
Hh.h:111: error: an explicit specialization must be preceded by 'template <>'
Hh.h:221: error: new declaration `void unsetenv(const char*)'
/usr/include/cygwin/stdlib.h:26: error: ambiguates old declaration `int unsetenv(const char*)'
In file included from Geometry.h:10,
from A3dStream.h:7,
from A3dStream.C:5:
Array.h: In member function `void Array<T>::resize(int)':
Array.h:40: error: `size' undeclared (first use this function)
Array.h:40: error: (Each undeclared identifier is reported only once for each function it appears in.)
Array.h:44: error: `a' undeclared (first use this function)
Array.h: In member function `void Array<T>::clear()':
Array.h:51: error: `a' undeclared (first use this function)
Array.h:51: error: `size' undeclared (first use this function)
Array.h: In member function `void Array<T>::init(int)':
Array.h:53: error: `size' undeclared (first use this function)
Array.h: In member function `void Array<T>::need(int)':
Array.h:57: error: `size' undeclared (first use this function)
Array.h: In member function `Array<T>& Array<T>::operator+=(const T&)':
Array.h:64: error: `a' undeclared (first use this function)
Array.h: In member function `void Array<T>::squeeze()':
Array.h:66: error: `size' undeclared (first use this function)
Array.h: In member function `const T& Array<T>::operator[](int) const':
Array.h:70: error: `a' undeclared (first use this function)
Array.h: In member function `T& Array<T>::operator[](int)':
Array.h:71: error: `a' undeclared (first use this function)
D'autres fichiers produiraient des erreurs similaires. J'utilise GCC 3.4.4 sur Cygwin sous Windows XP. Je ne suis pas un gourou C++ - bien que je fasse ma part d'archéologie logicielle - mais il me semble que vous aurez besoin de mettre à jour le code pour utiliser les en-têtes standard C++ car strstream.h en particulier est manquant (donc, nominalement, utilisez <strstream>
à la place), et cela signifie que vous devrez faire face à l'espace de noms std
et autres. Ce code est antérieur à la norme de 5 ans, il n'est donc pas déraisonnable d'avoir à le pirater pour le mettre à jour.
Bonne chance!
Cela nous aiderait probablement si vous décriviez au moins l'une des erreurs que vous obtenez en essayant de compiler ce code, ce que vous avez essayé de faire pour corriger l'erreur, et quels étaient les résultats. –
Et la question est? –