On Wed, 2010-06-30 at 18:37 +0200, N J wrote:
Hi,
I have a question about how to find a function in the opencv library.
I tried this:
(require :cffi)
;; load shared libs (cffi:load-foreign-library "libcv.so") (cffi:load-foreign-library "libhighgui.so")
;; define the function call CvCapture* capture = cvCaptureFromCAM( -1 ); (cffi:defctype cvcapture :pointer) (cffi:defcfun "cvCaptureFromCAM" cvcapture (type :int))
But I get: STYLE-WARNING: Undefined alien: "cvCaptureFromCAM"
Which means that "cffi" cannot find the name in the shared object file.
My shared object file looks like this:
nm /usr/lib64/libhighgui.so | grep -i cvcapturefromcam 000000000023d180 b _ZZL21icvCaptureFromCAM_V4LiE9autoindex
nm /usr/lib64/libhighgui.so | grep -i cvcapturecam 0000000000021760 t _ZL15icvCloseCAM_V4LP16CvCaptureCAM_V4L 0000000000021fa0 t _ZL15icvSetVideoSizeP16CvCaptureCAM_V4Lii 00000000000225f0 t _ZL19icvGrabFrameCAM_V4LP16CvCaptureCAM_V4L 00000000000216a0 t _ZL33v4l2_scan_controls_enumerate_menuP16CvCaptureCAM_V4L 0000000000021940 T _ZN20CvCaptureCAM_V4L_CPP11getPropertyEi 00000000000221c0 T _ZN20CvCaptureCAM_V4L_CPP11setPropertyEid 0000000000021d60 T _ZN20CvCaptureCAM_V4L_CPP13retrieveFrameEi 0000000000022a10 T _ZN20CvCaptureCAM_V4L_CPP4openEi 0000000000021880 T _ZN20CvCaptureCAM_V4L_CPP5closeEv 00000000000229f0 T _ZN20CvCaptureCAM_V4L_CPP9grabFrameEv 00000000000218b0 W _ZN20CvCaptureCAM_V4L_CPPD0Ev 0000000000021900 W _ZN20CvCaptureCAM_V4L_CPPD1Ev 000000000023af40 V _ZTI20CvCaptureCAM_V4L_CPP 0000000000033c20 V _ZTS20CvCaptureCAM_V4L_CPP 000000000023aee0 V _ZTV20CvCaptureCAM_V4L_CPP 000000000023d174 b _ZZL21icvSetPropertyCAM_V4LP16CvCaptureCAM_V4LidE5width 000000000023d170 b _ZZL21icvSetPropertyCAM_V4LP16CvCaptureCAM_V4LidE6height
Questions:
- Am I doing it all wrong or can one do like this?
- Is there a smart way to use the .so file to get the correct name of
functions?
That library seems to be C++ or a C library compiled with the C++ compiler and it doesn't export functions with C linkage, so you need to make one yourself