I looked at the way I was building my application and I rearranged the command-line so that order is exactly reverse to what it was before (I wasn't sure if the libraries included 1st or last take the precedence). Perl was also using its own "malloc". I re-built perl so that it now uses system's malloc instead of its own. The problem is still there.
I'd really appreciate if someone could give me some pointers to rectify this problem. Thanks a lot.
Here's how I used to make the application before Perl (in the Makefile):
all: dispatcher
dispatcher: dispatcher.o mqseries.o log.o cc -o dispatcher dispatcher.o mqseries.o log.o -Llib -lmqm
dispatcher.o: dispatcher.c mqseries.h bool.h log.h cc -c dispatcher.c
mqseries.o: mqseries.h mqseries.c bool.h cc -c -Iinclude mqseries.c
log.o: log.h log.c bool.h cc -c log.c
Here are the contents of the lib/ and include/ directories:
Mon Jun 7, 12:40:57 $ ls include/cmqc.h
Mon Jun 7, 12:40:59 $ ls lib/
libmqm.a
Here's how I build it with perl:
all: dispatcher
dispatcher: dispatcher.o mqseries.o log.o cc -o dispatcher dispatcher.o mqseries.o log.o -Llib -lmqm `perl -MExtUtils::Embed -e ldopts`
dispatcher.o: dispatcher.c mqseries.h bool.h log.h cc -c dispatcher.c `perl -MExtUtils::Embed -e ccopts`
mqseries.o: mqseries.h mqseries.c bool.h cc -c -Iinclude mqseries.c
log.o: log.h log.c bool.h cc -c log.c
Here's the output from "perl -MExtUtils::Embed -e ccopts":
-D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE -qmaxmem=-1 -qnoansialias -DUSE_NATIVE_DLOPEN -I/usr/local/include -q32 -D_LARGE_FILES -qlonglong -I/usr/local/lib/perl5/5.8.4/aix/CORE
Here's the output from "perl -MExtUtils::Embed -e ldopts":
-bE:/usr/local/lib/perl5/5.8.4/aix/CORE/perl.exp -brtl -L/usr/local/lib
-b32 /usr/local/lib/perl5/5.8.4/aix/auto/DynaLoader/DynaLoader.a
-L/usr/local/lib/perl5/5.8.4/aix/CORE -lperl -lbind -lnsl -ldl -lld -lm
-lcrypt -lc -lbsd
And finally here's the output from perl -V (after re-building it without malloc):
Summary of my perl5 (revision 5 version 8 subversion 4) configuration: Platform: osname=aix, osvers=4.3.3.0, archname=aix uname='aix hdndev 3 4 000195334c00 ' config_args='' hint=recommended, useposix=true, d_sigaction=define usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef useperlio=define d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=undef uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE -qmaxmem=-1 -qnoansialias -DUSE_NATIVE_DLOPEN -I/usr/local/include -q32 -D_LARGE_FILES -qlonglong', optimize=' ', cppflags='-D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE -qmaxmem=-1 -qnoansialias -DUSE_NATIVE_DLOPEN -I/usr/local/include' ccversion='3.6.6.0', gccversion='', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=8 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='ld', ldflags =' -brtl -L/usr/local/lib -b32' libpth=/usr/local/lib /lib /usr/lib /usr/ccs/lib libs=-lbind -lnsl -ldbm -ldl -lld -lm -lcrypt -lc -lbsd perllibs=-lbind -lnsl -ldl -lld -lm -lcrypt -lc -lbsd libc=/lib/libc.a, so=a, useshrplib=false, libperl=libperl.a gnulibc_version='' Dynamic Linking: dlsrc=dl_aix.xs, dlext=so, d_dlsymun=undef, ccdlflags=' -bE:/usr/local/lib/perl5/5.8.4/aix/CORE/perl.exp' cccdlflags=' ', lddlflags=' -bhalt:4 -bM:SRE -bI:$(PERL_INC)/perl.exp -bE:$(BASEEXT).exp -bnoentry -lc -L/usr/local/lib'
Characteristics of this binary (from libperl): Compile-time options: USE_LARGE_FILES Built under aix Compiled at Jun 7 2004 09:59:53 @INC: /usr/local/lib/perl5/5.8.4/aix /usr/local/lib/perl5/5.8.4 /usr/local/lib/perl5/site_perl/5.8.4/aix /usr/local/lib/perl5/site_perl/5.8.4 /usr/local/lib/perl5/site_perl /usr/local/lib/perl5/site_perl/5.005/aix /usr/local/lib/perl5/site_perl/5.005 .
Thanks, Salman
On Fri, 04 Jun 2004 14:17:56 +0100, Nick Ing-Simmons <[EMAIL PROTECTED]> wrote:
I don't even know what MQSeries is but here is my ¤0.02 anyway.
1. It is possible that ccopts has provied some -D flags that change things. In paticular things like: -D_LARGEFILE_SOURCE can mean that structs get an "off_t" that is now 64-bit and mis-match with libraries expectation of 32-bit.
2. Most likely though is that ldopts has added something like -lpthreads or some network library which behaves differently.
3. Even if libaries are okay together the _order_ of libraries on final LD line can be vital.
4. ldopts often adds -L/usr/local/lib. It is not unknown for /usr/local/lib
to be full of junk.
Given 2..4 it would be helpful to see what your ldopts are, and the before/after adding ldopts.