On 24 May, 2013, at 1:41, Chris Barker - NOAA Federal <chris.bar...@noaa.gov> 
wrote:

> As a side note to the main thread about dependencies:
> 
> How can  I static link?

It is a lot easier when there is only a static archive in a directory and no 
dylib (that is build libpng with --enable-static --disable-shared). In recent 
version of the devtools that should be good enough. When building with older 
Xcodes (before 4.0) you have to add '-Wl,-search_paths_first' to the link flags 
to ensure that the .a file will be used even when there is a .dylib futher on 
in the search path used by the linker (this must be used when static linking 
ncurses because there is a dylib for ncurses in the default search path).

I haven't found a way yet to make the linker prefer static libraries ("cc 
-static" does something different than it does on Linux and cannot be used to 
build normal binaries), at least not beyond the trick you mention later on.

> 
> I"ve struggled for literally years to get gcc to statically link, but
> it tries really hard to dynamically link instead. I have written way
> too many scripts that move or re-name dynamic libs temporarily while
> building, then put them back after.
> 
> Then a colleague of mine showed me the really neat trick -- pass the
> paths to the libs themselves through to gcc with "extra_objects"
> keyword in the Extension object, like so:
> 
> extra_objects = ["libhdf5.a", "libhdf5_hl.a", "libnetcdf.a"]
> 
> extensions = [Extension("netCDF4",
>                        sources,
>                        libraries=libs,
>                        include_dirs=inc_dirs,
>                        extra_objects=extra_objects,
>                        )]
> 
> very nifty -- works like a charm.
> 
> However, when I do this, I had to re-write part of the setup.py --
> actually, making it far more simple -- in this case, there was a lot
> of machinations finding the libs...
> 
> But Ideally, I"d ;like to build a semi-arbitrary extension with static
> linking while using the existing setup.py. Is there a way to
> minkey-path the setup, so I can use the existing one, but re-shuffle
> it some in place before the actual build occurs?

Not that I know, beyond assuring that static libraries are in a different 
directory than dylibs. That's not very hard to arrange, but it annoying work 
that shouldn't be necessary...

Ronald

_______________________________________________
Pythonmac-SIG maillist  -  Pythonmac-SIG@python.org
http://mail.python.org/mailman/listinfo/pythonmac-sig
unsubscribe: http://mail.python.org/mailman/options/Pythonmac-SIG

Reply via email to