[Numpy-discussion] C Extensions, CTypes and "external code & libraries"

Jon Wright wright at esrf.fr
Tue Feb 12 11:20:22 EST 2008


Lou Pecora wrote:
 >...  This appears to be the way
> static and shared libraries work, especially on Mac OS
> X, maybe elsewhere.

Have you tried linking against a GSL static library? I don't have a mac, 
but most linkers only pull in the routines you need. For example, using 
windows and mingw:

#include <stdio.h>
#include <gsl/gsl_sf_bessel.h>
int main (void)
{  double x = 5.0;
    double y = gsl_sf_bessel_J0 (x);
    printf ("J0(%g) = %.18e\n", x, y);
    return 0; }

...compiles to a.exe which outputs:

J0(5) = -1.775967713143382900e-001

The stripped executable is about 92 kB in comparison to the 2 mega byte 
libgsl.a. Unstripped there are about 150 symbols containing gsl, 
compared to 5351 symbols in the library libgsl.a. I just needed to put 
"-lgsl" on the command line and rename "$LIB/libgsl.dll.def" to 
something else so the shared version wasn't found.

In this case the linker has not pulled in all of the library. Presumably 
just the parts it needed, including various things like error reporting, 
sin, cos, exp etc. Older platforms, including vax and various unix'es 
also seemed to behave in the same way in the past.

Are you saying the mac is somehow different? Perhaps they're trying to 
hold people to "open source ransom", where they have to give away to 
source so it can be recompiled when the next OSX escapes ;-)

Cheers,

Jon









More information about the NumPy-Discussion mailing list