Philip Semanchuk <[EMAIL PROTECTED]> writes: > On Oct 23, 2008, at 3:18 PM, J Kenneth King wrote: > >> Philip Semanchuk <[EMAIL PROTECTED]> writes: >> >>> On Oct 23, 2008, at 11:36 AM, J Kenneth King wrote: >>> >>>> >>>> Hey everyone, >>>> >>>> I'm working on a python extension wrapper around Rob Hess' >>>> implementation of a SIFT feature detector. I'm working on a >>>> computer-vision based project that requires interfacing with >>>> Python at >>>> the higher layers, so I figured the best way to handle this would be >>>> in >>>> C (since my initial implementation in python was ungodly and slow). >>>> >>>> I can get distutils to compile the extension and install it in the >>>> python path, but when I go to import it I get the wonderful >>>> exception: >>>> >>>> ImportError: /usr/lib/python2.5/site-packages/pysift.so: undefined >>>> symbol: _sift_features >>> >>> >>> Kenneth, >>> You're close but not interpreting the error quite correctly. This >>> isn't an error from the compiler or preprocessor, it's a library >>> error. Assuming this is dynamically linked, your OS is reporting >>> that, >>> at runtime, it can't find the library that contains _sift_features. >>> Make sure that it's somewhere where your OS can find it. >> >> This is basically what I was looking for help with. So far the project >> directory is: >> >> /pysift >> /sift >> .. >> /include >> .. >> sift.h >> /src >> .. >> sift.c >> /src >> pysift.c >> setup.py >> >> I thought I could just #include "sift.h" in pysift.c as long as >> distutils passed the right -I path to gcc. > > That's true, and it sounds like you've got that part working. > > >> Maybe I should compile the sift code as a shared object and link it to >> my extension? How would I get distutils to build the makefile and tell >> gcc how to link it? >> >> Thanks for the reply. Python has spoiled me and my C is rather >> rusty. :) > > I don't know how to get setup.py to build a shared object separately. > I am in the same Python/C situation as you. I'm scrubbing the rust off > of my C skills and I'm also a n00b at developing extensions. I've > learned a lot from looking at other people's setup code, so maybe I > can help you there. > > My posix_ipc module links to the realtime lib "rt" and here's the > relevant snippets of setup.py: > > ------------------------------ > import distutils.core as duc > > libraries = [ ] > > libraries.append("rt") > > source_files = ["posix_ipc_module.c"] > > ext_modules = [ duc.Extension("posix_ipc", > source_files, > define_macros=define_macros, > libraries=libraries > ) > ] > > duc.setup(name="posix_ipc", version=VERSION, ext_modules=ext_modules) > > ------------------------------ > > You can download the whole thing here if you want to examine all the > code: > http://semanchuk.com/philip/posix_ipc/ > > HTH > Philip
I'll take a look, thanks! :) -- http://mail.python.org/mailman/listinfo/python-list