EDIT:
Oh, you didnโt say that you have code dependency in libcalg. This material needs to be compiled and included when you create a cextension.
Just modify setup.py:
# setup.py # ... ext_modules = [Extension("queue", ["queue.pyx", "libcalg/queue.c"])] # ...
We can step back and see if we can build a simple example:
I tried the following (3 files, myext.pyx, test.py, setup.py) and it seems to work fine. Of course, I'm on OS X 10.7, so it's not exactly the same as your environment. To eliminate differences, perhaps you can copy them and create them as a health check.
The contents of myext.pyx:
# myext.pyx def square(x): return x * x
Content test.py
# test.py from myext import square print "%d squared is %d"%(4, square(4))
Contents setup.py:
# setup.py from distutils.core import setup from distutils.extension import Extension from Cython.Distutils import build_ext ext_modules = [Extension("myext", ["myext.pyx"])] setup( name = 'Hello world app', cmdclass = {'build_ext': build_ext}, ext_modules = ext_modules )
I create a directory containing these 3 files:
cython_test$ /usr/bin/python setup.py build_ext --inplace running build_ext cythoning myext.pyx to myext.c building 'myext' extension creating build creating build/temp.macosx-10.7-intel-2.7 llvm-gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c myext.c -o build/temp.macosx-10.7-intel-2.7/myext.o llvm-gcc-4.2 -Wl,-F. -bundle -undefined dynamic_lookup -Wl,-F. -arch i386 -arch x86_64 build/temp.macosx-10.7-intel-2.7/myext.o -o /Users/steder/SO/cython_test/myext.so cython_test$ python test.py 4 squared is 16:
There is a similar otool output in my environment, and DYLD_LIBRARY_PATH is also not set, but nm -m shows the square as defined.
In particular:
00000000000011d0 (__DATA,__data) non-external ___pyx_k__square 00000000000011e0 (__DATA,__data) non-external ___pyx_mdef_5myext_square 0000000000001218 (__DATA,__bss) non-external ___pyx_n_s__square 0000000000000c80 (__TEXT,__text) non-external ___pyx_pf_5myext_square
Please give this snapshot and see what nm -m shows in your environment.