Skip to content

SWIG bindings overlinking against C library dependencies

The SWIG bindings (at least for python) are being overlinked against all of the dependencies of the upstream C library. See the example for the latest lalframe release RPM on CIT:

[NOTE: overlinking is the case for all lalsuite libraries, lalframe just demonstrates the issue most clearly]

$ ldd /usr/lib64/python2.7/site-packages/lalframe/_lalframe.so
	linux-vdso.so.1 =>  (0x00007ffc94bb8000)
	liblalframe.so.10 => /lib64/liblalframe.so.10 (0x00007fe8fc4cc000)
	liblalsupport.so.12 => /lib64/liblalsupport.so.12 (0x00007fe8fc167000)
	libz.so.1 => /lib64/libz.so.1 (0x00007fe8fbf51000)
	liblal.so.14 => /lib64/liblal.so.14 (0x00007fe8fbbe1000)
	libgsl.so.0 => /lib64/libgsl.so.0 (0x00007fe8fb7b8000)
	libgslcblas.so.0 => /lib64/libgslcblas.so.0 (0x00007fe8fb57b000)
	libfftw3.so.3 => /lib64/libfftw3.so.3 (0x00007fe8fb092000)
	libfftw3f.so.3 => /lib64/libfftw3f.so.3 (0x00007fe8fab6e000)
	libFrame.so.1 => /lib64/libFrame.so.1 (0x00007fe8fa8f3000)
	libframecppc.so.3 => /lib64/libframecppc.so.3 (0x00007fe8fa6b0000)
	libm.so.6 => /lib64/libm.so.6 (0x00007fe8fa3ae000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe8fa192000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fe8f9dc5000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fe8f9bc1000)
	libsz.so.2 => /lib64/libsz.so.2 (0x00007fe8f99be000)
	libhdf5.so.8 => /lib64/libhdf5.so.8 (0x00007fe8f93c7000)
	libhdf5_hl.so.8 => /lib64/libhdf5_hl.so.8 (0x00007fe8f9193000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fe8f8f7d000)
	libsatlas.so.3 => /usr/lib64/atlas/libsatlas.so.3 (0x00007fe8f8367000)
	libframecpp.so.12 => /usr/lib64/libframecpp.so.12 (0x00007fe8f815d000)
	libframecpp8.so.7 => /usr/lib64/libframecpp8.so.7 (0x00007fe8f7def000)
	libframecpp7.so.4 => /usr/lib64/libframecpp7.so.4 (0x00007fe8f7b47000)
	libframecpp6.so.8 => /usr/lib64/libframecpp6.so.8 (0x00007fe8f7822000)
	libframecpp4.so.8 => /usr/lib64/libframecpp4.so.8 (0x00007fe8f752e000)
	libframecpp3.so.6 => /usr/lib64/libframecpp3.so.6 (0x00007fe8f728e000)
	libframecppcmn.so.9 => /usr/lib64/libframecppcmn.so.9 (0x00007fe8f7004000)
	libldastoolsal.so.6 => /usr/lib64/libldastoolsal.so.6 (0x00007fe8f6d7a000)
	libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007fe8f6918000)
	librt.so.1 => /usr/lib64/librt.so.1 (0x00007fe8f6710000)
	libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fe8f6409000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fe8fc9ae000)
	libaec.so.0 => /lib64/libaec.so.0 (0x00007fe8f6201000)
	libgfortran.so.3 => /lib64/libgfortran.so.3 (0x00007fe8f5edf000)
	libquadmath.so.0 => /lib64/libquadmath.so.0 (0x00007fe8f5ca3000)

I would have (naïvely) presumed that the lalframe/_lalframe.so library would link against liblalframe.so and not much else.

Have I misunderstood the way that SWIG bindings are linked?

Or, is there a way to disable the over-linking, especially when building the SWIG bindings separately from the C library, as is done for conda?