[BioLib-dev] release candidate

Pjotr Prins pjotr.public14 at thebird.nl
Wed Aug 12 07:15:22 UTC 2009


Hi Xin,

I renamed the test file so it gets found by Cmake.

However, the test fails:

  cd src/mappings/swig/python/libsequence
  cmake .
  make
  make test

gives:

  Command: "/usr/bin/python" "./../test/test_libsequence.py" 
  Directory: /home/pjotr/data/git/opensource/biolib-libsequence/src/mappings/swig/python/libsequence
  "TestPythonlibsequence" start time: Aug 12 08:59 CEST
  Output:
  ----------------------------------------------------------
  Traceback (most recent call last):
    File "./../test/test_libsequence.py", line 5, in <module>
      from biolib.libsequence import *
    File "biolib/libsequence.py", line 7, in <module>
      import _libsequence
  ImportError: /home/pjotr/data/git/opensource/biolib-libsequence/src/clibs/biolib_gsl/build/libbiolib_gsl-0.0.5.so: undefined symbol: gsl_rng_uniform_int


This error is caused, most likely, because we build the gsl with inline
functions.  

  INLINE_DECL unsigned long int gsl_rng_uniform_int (const gsl_rng *r, unsigned l ong int n);

The INLINE is used for performance reasons (see
http://www.greenend.org.uk/rjk/2003/03/inline.html) and is not visible outside
the shared library itself. However SWIG thinks it is visible, because it is
defined in gsl_rng.h) and has created a mapping for it. That is why the test
fails. A first good case for an integration test :-)

Can you find a way to tell SWIG *not* to create a mapping for this, and similar,
declarations?

But first you need to ascertain this test fails on your system. If it does not,
I suspect your linker finds a different GSL shared library on your system - one 
that has the INLINE statement switched off. In Linux we can use something like

  ldd libsequence-swig.so (or similar dylib)

to find what libraries it links against. On my system it renders:

  ldd biolib/_libsequence.so

        linux-gate.so.1 =>  (0xb7f42000)
        libbiolib_libsequence-0.0.5.so => /home/pjotr/data/git/opensource/biolib-libsequence/src/clibs/libsequence-1.6.6/build/libbiolib_libsequence-0.0.5.so (0xb7acd000)
        libpython2.5.so.1.0 => /usr/lib/libpython2.5.so.1.0 (0xb797f000)
        libbiolib_gsl-0.0.5.so => /home/pjotr/data/git/opensource/biolib-libsequence/src/clibs/biolib_gsl/build/libbiolib_gsl-0.0.5.so (0xb7735000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7647000)
        libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7621000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7614000)
        libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb74b8000)
        libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb749f000)
        libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb749b000)
        libutil.so.1 => /lib/i686/cmov/libutil.so.1 (0xb7497000)
        /lib/ld-linux.so.2 (0xb7f43000)

You see it uses libbiolib_gsl-0.0.5.so

Pj.




More information about the BioLib-dev mailing list