On Wed, 11 Jul 2001 21:57:08 MDT, bowman <[EMAIL PROTECTED]>  said:
> From: "Ashutosh Singh" <[EMAIL PROTECTED]>
> > I built gtk version 1.2.8 and 1.2.9 and 1.2.10 and they are all
> > giving core dump, when you try to run the test files on AIX 4.3.3
> I'm running on AIX4.3, but the machine is at work, and I can't recall the
> setup? I am thinking I had to go with static libraries. Also, what

You can get shared libraries to work, with a little aggravation.  This
is what I ended up doing:

1) Hack up 'libtool' to not pass the '-berok' flag when building a shared
library.  This will cause errors when linking, so you have to:

2) Fix each tool to pass the added -lFoo flags needed to get rid of the
errors.  A lot of programs that use libtool to build are very lazy about
passing all the needed '-lXm -lXt -lX11 -lm' flags.

Technically speaking, you *can* get it to work just by doing (2) for
each program - but doing (1) enforces it as you don't get a clean build
till you get it right.

For the technically minded, here's the explanation of the problem:

The way the AIX linker is implemented, it only records the -lFoo flags
actually passed when a shared lib is created.  So let's say you create
a shared libfoo.a that calls something in libbar.a.  There's 2 possibilities:

1) You link with '-lbar'.  Libfoo.a then gets created with a reference to
libbar.a (use 'dump -H libfoo.a' to check).  At runtime, your program's
references to libbar.a get resolved, and all is fine.

2) You link with '-berok' and *dont* pass -lbar (which is what libtool does
by default - it likes to skip all the -lXt -lX11 -lm stuff).  Since you didn't
pass -lbar, no reference to libbar.a gets recorded in libfoo.a.  And since
you specified -berok, it gets flagged as an OK library.  At runtime, your
program's references to libfoo.a get resolved - but any libfoo.a references
to libbar.a are *not* resolved even if some other module/library DOES
reference libbar.a - the runtime binder says "no reference in libfoo.a, no
need to fixup".  Your program then crashes when it branches through an
unresolved function pointer thinking it's heading to libbar.a.

PGP signature

Reply via email to