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
--
http://mail.python.org/mailman/listinfo/python-list