First of all, Happy Pi Day.
The French manual has programs pgcd.cc and pgcd.cpp.
I haven't been able to get them to work. It is probably
because my system isn't set up correctly, but I was wondering
if they work for other people. (My computer has enough tools and
libraries to compile giac, but that's probably about it.)
These files are also in the giac distribution, although
the pgcd.cc is different and the pgcd.cpp in the distribution
has the line
#include "pgcd.h"
commented out, which is good since there doesn't seem to be any
file names pgcd.h.
If I compile (either version) of pgcd.cc, it compiles without problem.
(I use the line
g++ -g pgcd.cc -lgiac -lgmp
from the top of the file.) If I try to run it,
./a.out
I get an immediate
Segmentation fault (core dumped)
So there's probably something wonky about my computer.
But if I try to compile pgcd.cpp (with the pgcd.h line commented out) using
g++ -I.. -fPIC -DPIC -g -c pgcd.cpp -o pgcd.lo
from the top of the file, I get errors beginning with
> g++ -I.. -fPIC -DPIC -g -c pgcd.cpp -o pgcd.lo
pgcd.cpp:29:45: error: no matching function for call to ‘giac::una
ry_function_unary::unary_function_unary(giac::gen (*)(const giac::gen&), const string&)’
unary_function_unary __pgcd(&_pgcd,_pgcd_s);
^
(I've attached the full output at the end.)
Does this file compile for anyone else?
Jay
pgcd.cc and pgcd.cpp
Modérateur : xcasadmin
pgcd.cc and pgcd.cpp
- Pièces jointes
-
- pgcd.zip
- (1.03 Kio) Téléchargé 107 fois
Re: pgcd.cc and pgcd.cpp
Indeed, the source listing is incomplete, you must add
before #include <giac/giac.h>
Code : Tout sélectionner
#include <giac/config.h>
Re: pgcd.cc and pgcd.cpp
When I add that line, I still get the same error, starting:
>> g++ -I.. -fPIC -DPIC -g -c pgcd.cpp
pgcd.cpp:30:45: error: no matching function for call to ‘giac::unary_function_unary::unary_function_unary(giac::gen (*)(const giac::gen&), const string&)’
unary_function_unary __pgcd(&_pgcd,_pgcd_s);
^
In file included from /usr/include/giac/giac.h:9,
from pgcd.cpp:7:
/usr/include/giac/unary.h:189:5: note: candidate: ‘giac::unary_function_unary::unary_function_unary(unsigned int, giac::gen (* const&)(const giac::gen&), const giac::partial_derivative*, giac::taylortype, const char*, giac::printfunction, giac::printfunction, giac::printfunction)’
>> g++ -I.. -fPIC -DPIC -g -c pgcd.cpp
pgcd.cpp:30:45: error: no matching function for call to ‘giac::unary_function_unary::unary_function_unary(giac::gen (*)(const giac::gen&), const string&)’
unary_function_unary __pgcd(&_pgcd,_pgcd_s);
^
In file included from /usr/include/giac/giac.h:9,
from pgcd.cpp:7:
/usr/include/giac/unary.h:189:5: note: candidate: ‘giac::unary_function_unary::unary_function_unary(unsigned int, giac::gen (* const&)(const giac::gen&), const giac::partial_derivative*, giac::taylortype, const char*, giac::printfunction, giac::printfunction, giac::printfunction)’
Re: pgcd.cc and pgcd.cpp
Indeed, it hasn't been updated since a very long time. From doc/en/pgcd.cpp:
Code : Tout sélectionner
// -*- mode:C++ ; compile-command: "g++ -I.. -fPIC -DPIC -g -c pgcd.cpp -o pgcd.lo && ln -sf pgcd.lo pgcd.o && gcc -shared pgcd.lo -lc -lgiac -Wl,-soname -Wl,libpgcd.so.0 -o libpgcd.so.0.0.0 && ln -sf libpgcd.so.0.0.0 libpgcd.so.0 && ln -sf libpgcd.so.0.0.0 libpgcd.so" -*-
using namespace std;
#include <stdexcept>
#include <cmath>
#include <cstdlib>
#include <giac/config.h>
#include <giac/giac.h>
//#include "pgcd.h"
#ifndef NO_NAMESPACE_GIAC
namespace giac {
#endif // ndef NO_NAMESPACE_GIAC
gen monpgcd(const gen & a0,const gen & b0){
gen q,r,a=a0,b=b0;
for (;b!=0;){
r=irem(a,b,q);
a=b;
b=r;
}
return a;
}
gen _monpgcd(const gen & args,GIAC_CONTEXT){
if ( (args.type!=_VECT) || (args._VECTptr->size()!=2))
setsizeerr();
vecteur &v=*args._VECTptr;
return monpgcd(v[0],v[1]);
}
const string _monpgcd_s("monpgcd");
unary_function_eval __monpgcd(0,&_monpgcd,_monpgcd_s);
unary_function_ptr at_monpgcd (&__monpgcd,0,true);
#ifndef NO_NAMESPACE_GIAC
} // namespace giac
#endif // ndef NO_NAMESPACE_GIAC
Re: pgcd.cc and pgcd.cpp
Thanks! It works perfectly now.
Also, the version of pgcd.cc in that directly both compiles and runs for me.
Also, the version of pgcd.cc in that directly both compiles and runs for me.