Boost logo

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