Linking against static library in specific path

4,201 views
Skip to first unread message

Nahuel Defossé

unread,
Dec 13, 2010, 9:03:16 AM12/13/10
to Cython Users Google Group
I'm trying to wrap some existing C++ code which is compiled and bundled in static .a libraries.
I've followed the guide exposed at http://wiki.cython.org/WrappingCPlusPlus and I wrote down this
setup.py file:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

setup(
  name = 'ipcbus',
  ext_modules=[
    Extension("ipcbus",
              sources=["ipcbus.pyx", "../lib/ipcbus/ipcbus_message.cpp"], # Note, you can link against a c++ library instead of including the source
              include_dirs=["../lib/ipcbus"],
              libraries = ["../lib/ipcbus.a",],
              #extra_link_args = ["../lib/libipcbus.a",],
              language="c++"),
    ],
  cmdclass = {'build_ext': build_ext},

)

Am I getting something wrong? libipcbus.a is a static lib, and though it compiles fine, I get some undefined symbols errors.

The library, as the above text shows is located in ../lib/.

Thanks

Nahuel Defossé

unread,
Dec 13, 2010, 9:29:23 AM12/13/10
to Cython Users Google Group
I found the answer, I had to add extra_objects to the Extension call, like this:

setup(
  name = 'ipcbus',
  ext_modules=[
    Extension("ipcbus",
              sources=["ipcbus.pyx", "../lib/ipcbus/ipcbus_message.cpp"], # Note, you can link against a c++ library instead of including the source
              include_dirs=["../lib/ipcbus"],
              libraries = ["../lib/ipcbus.a",],
              language="c++",
              extra_objects=["../lib/libipcbus.a"],),
    ],
  cmdclass = {'build_ext': build_ext},

)


Sorry for bothering you


2010/12/13 Nahuel Defossé <nahuel....@gmail.com>

Lisandro Dalcin

unread,
Dec 13, 2010, 4:53:00 PM12/13/10
to cython-users
2010/12/13 Nahuel Defossé <nahuel....@gmail.com>:
> I found the answer, I had to add extra_objects to the Extension call, like
> this:
> setup(
>   name = 'ipcbus',
>   ext_modules=[
>     Extension("ipcbus",
>               sources=["ipcbus.pyx", "../lib/ipcbus/ipcbus_message.cpp"], #
> Note, you can link against a c++ library instead of including the source
>               include_dirs=["../lib/ipcbus"],
>               libraries = ["../lib/ipcbus.a",],
>               language="c++",
>               extra_objects=["../lib/libipcbus.a"],),
>     ],
>   cmdclass = {'build_ext': build_ext},
> )
> I found the answer in
> Stackoverflow: http://stackoverflow.com/questions/2105508/wrap-c-lib-with-cython
> Sorry for bothering you
>

Are you sure you need "libraries = ["../lib/ipcbus.a",]" ??

--
Lisandro Dalcin
---------------
CIMEC (INTEC/CONICET-UNL)
Predio CONICET-Santa Fe
Colectora RN 168 Km 472, Paraje El Pozo
Tel: +54-342-4511594 (ext 1011)
Tel/Fax: +54-342-4511169

Reply all
Reply to author
Forward
0 new messages