|
Boost Users : |
From: Rush Manbert (rush_at_[hidden])
Date: 2005-10-12 12:10:36
Gennadiy Rozental wrote:
>>Hi Gennadiy,
>>
>>I'm sorry for the screwup. It looks like I didn't capture the stderr
>>output in the text file. The attached file
>>is from another build attempt that fails updating those same 6 targets,
>>but it shows the undefined
>>symbol errors. If I go and look in the build directories, I can see that
>>
>>
>
>I am no expect for Mac, but from an output it looks like this system, the
>same as Windows, doesn't support unresolved symbols within shared libraries.
>If you could confirm that this is true, I will have to update a Jamfile to
>prevent these to be built and you should be using static libraries instead.
>If it's not true - this is toolset issue.
>
>Gennadiy
>
>
>
It appears that the default treatment for undefined symbols is error,
but there are a couple of ld
flags that can circumvent that.
Excerpt from "man ld":
-undefined treatment
Specifies how undefined symbols are to be treated.
treatment
can be: error, warning, or suppress. Which cause the
treatment
of undefined symbols as either, errors, warnings, or
suppresses
the checking of undefined symbols. The default is to
treat
undefined symbols as errors. When the environment
variable
MACOSX_DEPLOYMENT_TARGET is set to 10.3 or higher then
-unde-
fined dynamic_lookup can also be used to allow any
undefined
symbols to be looked up dynamically at runtime. Use of a
binary
built with this flag requires a system with a dynamic
linker
from Mac OS X 10.3 or later. The flag -undefined
define_a_way
can also be used to cause the static linker to create a
private
definition for all undefined symbols. This flag should
only be
used if it is known that the undefined symbols are not
refer-
enced as any use of them may cause a crash.
-U sym Allow the symbol sym to be undefined, even if the -r flag
is not
given. Produce an executable file if the only undefined
symbols
are those specified with -U.
This option overlaps with a compiler option. If you
use the
compiler driver cc(1) to invoke ld, invoke this option
in this
way: -Wl,-U,sym.
And since -U references -r:
-r Save the relocation information in the output file so
that it
can be the subject of another ld run. The resulting
file type
is a Mach-O relocatable file (MH_OBJECT) if not otherwise
speci-
fied. This flag also prevents final definitions from
being
given to common symbols, and suppresses the `undefined
symbol'
diagnostics.
So it looks like the dylibs can be built if the right flags are passed
to ld. I would
try it, but I have no idea how to go about changing the jamfile, or even
which
one to change. If you want me to test a modified jamfile, you could
email it
with instructions to rush at manbert dot com.
- Rush
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net