Hi,

I recently broke up the CPP DATA block of a perl module I wrote into 6
smaller, organized '.c' files.  I did this for several reasons -- better
syntax highlighting in my editor, easier to navigate than scrolling through
several thousand lines of code, and with luck it would only recompile the
pieces that changed, rather than the whole thing.

Anyway, This is how I _am_ doing it, which does not work:

use Inline (Config => DIRECTORY => '/home/me/this_project/inline');
use Inline CPP => "/home/me/this_project/basics.c";
use Inline CPP => "/home/me/this_project/draw.c";
use Inline CPP => "/home/me/this_project/analysis.c";
use Inline CPP => "/home/me/this_project/output.c";
use Inline CPP => "/home/me/this_project/vector.c";
use Inline CPP => "/home/me/this_project/remotesensing.c";

All 6 files include a header file, "this_project.h", which has function
prototypes of all the subroutines in all the '.c' files.  However I get an
error

--
Can't load '/build_path/module_pm_9ba1.so' for module module_pm_9ba1:
/build_path/HIGHQFPC_pm_9ba1.so: undefined symbol: _Z13float_comparePKvS0_
at /usr/lib/perl5/5.8.0/i386-linux-thread-multi/DynaLoader.pm line 229. at
/usr/lib/perl5/site_perl/5.8.0/Inline.pm
--

Running the .so through the linux util nm reveals a list of my subroutines,
but only those defined or called in 'analysis.c' are present.  These include
the 10 or so subs defined in 'analysis.c' and one NOT defined there,
'float_compare', which is a simple comparison function for qsort, defined in
'basics.c'.  No other subroutines are listed.

What I find odd is that it's not the first file I included, or the last, but
the third which made it in.  It's the first alphabetically, and maybe that's
it, but I don't know why.  Anyway, am I including the files wrong?  The
documentation on cpan.org is rather vague on the subject of including source
_files_, and I searched Google and usenet without much luck on the subject.
I'm hoping someone here could help.

Thanks!

--
David Christopher Asher


Reply via email to