EDIT:
Ах, вы не упоминали, что зависели от кода в libcalg. Этот материал должен быть скомпилирован и включен при сборке CEXTENS.
Просто измените setup.py:
# setup.py
# ...
ext_modules = [Extension("queue", ["queue.pyx", "libcalg/queue.c"])]
# ...
Мы могли бы сделать шаг назад и посмотреть, сможете ли вы построить действительно простой пример:
Я попробовал следующее (3 файла, myext.pyx, test.py, setup.py), и, похоже, оно работает нормально. Конечно, я использую OS X 10.7, поэтому она не совсем такая же, как ваша среда. Чтобы исключить различия, возможно, вы можете скопировать их и создать их как проверку работоспособности.
Содержимое myext.pyx:
# myext.pyx
def square(x):
return x * x
Содержимое test.py
# test.py
from myext import square
print "%d squared is %d"%(4, square(4))
Содержимое файла 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
)
Я создаю каталог, содержащий эти 3 файла:
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:
Моя среда имеет аналогичные выходные данные otool, и DYLD_LIBRARY_PATH также не установлен, но nm -m показывает квадрат в соответствии с определением.
В частности:
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
Пожалуйста, сделайте снимок и посмотрите, что он показывает в вашей среде.