Hi Mark Thanks for the reply. I tried the line that you suggested but that doesn't work. I then added the -fPIC switch to the Makefile.PL and that seems to of worked giving me the output message as:
gcc -c -I/usr/lib64/perl5/vendor_perl/5.8.5/x86_64-linux-thread-multi/PDL/Core -D_REENTRANT -D_GNU_SOURCE -DDEBUGGING -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2 -g -pipe -m64 -DVERSION=\"0.1\" -DXS_VERSION=\"0.1\" -fPIC "-I/usr/lib64/perl5/5.8.5/x86_64-linux-thread-multi/CORE" Suma.c gcc -c -o suma.o -g -fPIC suma.c Running Mkbootstrap for PDL::Suma () chmod 644 Suma.bs rm -f blib/arch/auto/PDL/Suma/Suma.so gcc -shared Suma.o suma.o -o blib/arch/auto/PDL/Suma/Suma.so -lm chmod 755 blib/arch/auto/PDL/Suma/Suma.so cp Suma.bs blib/arch/auto/PDL/Suma/Suma.bs chmod 644 blib/arch/auto/PDL/Suma/Suma.bs Manifying blib/man3/PDL::Suma.3pm After that I continued with the instructions and tried running the test.pl file but now I'm getting another error. [EMAIL PROTECTED] demo3]$ make test PERL_DL_NONLAZY=1 /usr/bin/perl "-Iblib/lib" "-Iblib/arch" test.pl 1..1 Can't locate PDL/Suma.pm in @INC (@INC contains: blib/lib blib/arch /usr/lib64/perl5/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/5.8.5 /usr/lib64/perl5/site_perl/5.8.5/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.4/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.3/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.2/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.1/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.0/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl/5.8.4 /usr/lib/perl5/site_perl/5.8.3 /usr/lib/perl5/site_perl/5.8.2 /usr/lib/perl5/site_perl/5.8.1 /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.5/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.4/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.3/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.2/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.1/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.0/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl/5.8.4 /usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/perl5/vendor_perl/5.8.2 /usr/lib/perl5/vendor_perl/5.8.1 /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl .) at test.pl line 12. BEGIN failed--compilation aborted at test.pl line 12. not ok 1 make: *** [test_dynamic] Error 2 Any ideas on this one? Regards Guy -----Original Message----- From: Mark Pfeiffer [mailto:[EMAIL PROTECTED] Sent: Wednesday, February 21, 2007 5:04 PM To: Phuong, Guy Cc: [email protected] Subject: Re: [Perldl] How to access my fortran library routines in PDL Hi Guy, just looking at the output and having not tried this. It looks like you have a typo with your 'C' file. Put a new line at the end. And looks like you need -fPIC in your second compilation line. If you do: gcc -fPIC -shared Suma.o suma.o -o blib/arch/auto/PDL/Suma/ Suma.so -lm immediately after the failure, does it work? On 22/02/2007, at 8:27 AM, Phuong, Guy wrote: > Hello Xavier > > Thank you so much for sending me that link. Everything seems a lot > more > clearer now and I think I understand how all the bits and pieces > work now. > I'll also be looking forward to your fortran cookbook as that is > primarily > what I'm trying to do. > > I have run through your instructions step by step and when I get to > the part > when I type the command > > Make (after perl Makefile.PL) I get an error message and I'm > forced to stop > here. The error message is as follows > > > /usr/bin/perl -I/usr/lib64/perl5/vendor_perl/5.8.5/x86_64-linux- > thread-multi > "-MPDL::PP qw/PDL::Suma PDL::Suma Suma/" Suma.pd > touch Suma.xs > /usr/bin/perl /usr/lib/perl5/5.8.5/ExtUtils/xsubpp -typemap > /usr/lib/perl5/5.8.5/ExtUtils/typemap -typemap > /usr/lib64/perl5/vendor_perl/5.8.5/x86_64-linux-thread-multi/PDL/ > Core/typema > p.pdl Suma.xs > Suma.xsc && mv Suma.xsc Suma.c > gcc -c > -I/usr/lib64/perl5/vendor_perl/5.8.5/x86_64-linux-thread-multi/PDL/ > Core > -D_REENTRANT -D_GNU_SOURCE -DDEBUGGING -fno-strict-aliasing -pipe > -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 > -I/usr/include/gdbm -O2 -g -pipe -m64 -DVERSION=\"0.1\" > -DXS_VERSION=\"0.1\" -fPIC > "-I/usr/lib64/perl5/5.8.5/x86_64-linux-thread-multi/CORE" Suma.c > gcc -c -o suma.o -g suma.c > suma.c:11:3: warning: no newline at end of file > Running Mkbootstrap for PDL::Suma () > chmod 644 Suma.bs > rm -f blib/arch/auto/PDL/Suma/Suma.so > gcc -shared Suma.o suma.o -o blib/arch/auto/PDL/Suma/Suma.so -lm > /usr/bin/ld: suma.o: relocation R_X86_64_PC32 against > `cos@@GLIBC_2.2.5' can > not be used when making a shared object; recompile with -fPIC > /usr/bin/ld: final link failed: Bad value > collect2: ld returned 1 exit status > make: *** [blib/arch/auto/PDL/Suma/Suma.so] Error 1 > > > > I'm not exactly sure what the error is. Do you have any idea? > > Your help is much appreciated, > Regards > > Guy > > > > -----Original Message----- > From: Xavier Calbet [mailto:[EMAIL PROTECTED] > Sent: Wednesday, February 21, 2007 5:03 AM > To: Vanuxem Grégory > Cc: Karl Glazebrook; Phuong, Guy; [EMAIL PROTECTED]; > [email protected] > Subject: Re: [Perldl] How to access my fortran library routines in PDL > > Hello Guy, > > I have just made a document describing how to compile a C function > into PDL. Tomorrow, hopefully, I will do the same for a FORTRAN > function. > Have a look in > > http://wiki.jach.hawaii.edu/pdl_wiki-bin/wiki/PDL_Cookbook > > Cheers, > > Xavier > > > On 2/21/07, Vanuxem Grégory <[EMAIL PROTECTED]> wrote: >> Le mardi 20 février 2007 à 19:41 -0300, Karl Glazebrook a écrit : >>> On CallExt from perl have a look at callext.t in the PDL >>> distribution. >>> >>> >>> It is important to clarify whether you are having problems >>> building a >>> routine to use with CallExt or simply running it, >>> >>> The other way to call C etc is using Inline::PP >> >> Yes and here is a quickly hacked example (I call fortran here): >> >> ==================================================================== >> use PDL; >> >> use Inline Pdlpp => Config => >> INC => "-I$ENV{HOME}/include", >> LIBS => "-lm -lblas -lg2c", >> #code to be included in the generated XS >> AUTO_INCLUDE => <<'EOINC', >> >> extern double dasum_(int *n, double *x, int *incx); >> >> EOINC >> ; >> >> use Inline Pdlpp; >> >> $a = random(5); >> print $a->sumover,"\n"; >> print $a->mydasum(),"\n"; >> >> __DATA__ >> >> __Pdlpp__ >> >> pp_def('mydasum', >> Pars => 'x(n); [o] res()', >> GenericTypes => [D], >> Code => >> ' >> int inc = 1; >> $res() = dasum_(&($SIZE(n)),$P(x),&inc); >> '); >> >> >> > ====================================================================== > ===== >> >> Apparently, on my distro (Debian), the html documentation of this >> functionnality was not installed so I had to use 'man' (man >> PDL::PP-Inline). >> >> Greg >> >> >> >> >> >> > ______________________________________________________________________ > _____ >> Yahoo! Mail réinvente le mail ! Découvrez le nouveau Yahoo! Mail >> et son > interface révolutionnaire. >> http://fr.mail.yahoo.com >> >> > > _______________________________________________ > Perldl mailing list > [email protected] > http://mailman.jach.hawaii.edu/mailman/listinfo/perldl > cheers Mark Pfeiffer [EMAIL PROTECTED] _______________________________________________ Perldl mailing list [email protected] http://mailman.jach.hawaii.edu/mailman/listinfo/perldl
