0

我正在尝试用 MinGW (gcc/g++ 4.7.2)、Windows 7、Eclipse CDT (Kepler) 编译使用 asmlibrary (by Yao Wei) 的代码,但没有成功。我可以使用 MVSC 编译相同的库、Windows 端口(asmlibrary.dll),并且作者还发布了三个文件(cygasmlibrary-4.dll、libasmlibrary.a、libasmlibrary.dll.a),它们应该可以与 gcc 一起使用。当我尝试编译使用 asmlibrary 的代码时,出现此错误:

13:06:05 **** Rebuild of configuration Release for project AsmLibrarySDK_FIT ****
Info: Internal Builder is used for build
g++ "-IC:\\OpenCV246PC\\build\\include" -O3 -Wall -c -fmessage-length=0 -o demo_fit.o "..\\demo_fit.cpp" 
g++ "-IC:\\OpenCV246PC\\build\\include" -O3 -Wall -c -fmessage-length=0 -o video_camera.o "..\\video_camera.cpp" 
g++ "-IC:\\OpenCV246PC\\build\\include" -O3 -Wall -c -fmessage-length=0 -o vjfacedetect.o "..\\vjfacedetect.cpp" 
..\vjfacedetect.cpp: In function ‘bool detect_all_faces(asm_shape**, int&, const IplImage*)’:
..\vjfacedetect.cpp:85:11: warning: variable ‘pt1’ set but not used [-Wunused-but-set-variable]
..\vjfacedetect.cpp:85:16: warning: variable ‘pt2’ set but not used [-Wunused-but-set-variable]
g++ "-LC:\\OpenCV246MinGW\\x86\\lib" "-LC:\\asmlibraryFaceXpress" -o AsmLibrarySDK_FIT.exe vjfacedetect.o video_camera.o demo_fit.o -lopencv_calib3d246 -lopencv_contrib246 -lopencv_core246 -lopencv_features2d246 -lopencv_flann246 -lopencv_gpu246 -lopencv_highgui246 -lopencv_imgproc246 -lopencv_legacy246 -lopencv_ml246 -lopencv_nonfree246 -lopencv_objdetect246 -lopencv_photo246 -lopencv_stitching246 -lopencv_video246 -lopencv_videostab246 -lasmlibrary 
demo_fit.o:demo_fit.cpp:(.text.startup+0x4c9): undefined reference to `_imp___ZN10asmfitting12ASMSeqSearchER9asm_shapePK9_IplImageibi'
demo_fit.o:demo_fit.cpp:(.text.startup+0x638): undefined reference to `_imp__InitShapeFromDetBox'
demo_fit.o:demo_fit.cpp:(.text.startup+0x21c): undefined reference to `_imp__InitShapeFromDetBox'
demo_fit.o:demo_fit.cpp:(.text.startup+0x286): undefined reference to `_imp___ZN10asmfitting8Fitting2EP9asm_shapeiPK9_IplImagei'
demo_fit.o:demo_fit.cpp:(.text.startup+0x442): undefined reference to `_imp___ZN10asmfitting12ASMSeqSearchER9asm_shapePK9_IplImageibi'
demo_fit.o:demo_fit.cpp:(.text.startup+0x58c): undefined reference to `_imp__InitShapeFromDetBox'
c:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: demo_fit.o: bad reloc address 0x0 in section `.ctors'
c:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status

我问了作者这个问题,他回复我如下:

只是链接像 libasmlibrary.a 不是 -lasmlibrary

我不明白。即使我从命令行尝试,g++ 也不会接受:

C:\Users\Nenad\eclipseCDT\opencv2cookbook\AsmLibrarySDK_FIT\Debug>g++ "-LC:\\OpenCV246MinGW\\x86\\lib" "-LC:\\asmlibraryFaceXpress" -o AsmLibrarySDK_FIT.exe vjfacedetect.o video_camera.o demo_fit.o -l
opencv_calib3d246 -lopencv_contrib246 -lopencv_core246 -lopencv_features2d246 -lopencv_flann246 -lopencv_gpu246 -lopencv_highgui246 -lopencv_imgproc246 -lopencv_legacy246 -lopencv_ml246 -lopencv_nonfr
ee246 -lopencv_objdetect246 -lopencv_photo246 -lopencv_stitching246 -lopencv_video246 -lopencv_videostab246 libasmlibrary.a

(错误与帖子顶部相同)如果我尝试放入 -libasmlibrary.a (当然)我得到:

    c:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: cannot find -llibasmlibrary.a

libasmlibrary gives me g++: error: libasmlibrary: No such file or directory
and so on...

据我所知,链接这个库的唯一正确方法是使用 -lasmlibrary 但它会产生顶部提到的错误。

顺便说一句,即使我根本不包含那个库,我还是得到了这个错误。

然后我又问了作者,他回复我:

像这样的代码 g++ ac -o test libasmlibrary.a -lopencv_library

即使我这样做(或者至少我认为我理解他),它也会产生相同的结果。当然,我什至将(cygasmlibrary-4.dll、libasmlibrary.a、libasmlibrary.dll.a)复制到调试目录中。

g++ "-LC:\\OpenCV246MinGW\\x86\\lib" "-LC:\\asmlibraryFaceXpress" -o AsmLibrarySDK_FIT.exe vjfacedetect.o video_camera.o demo_fit.o libasmlibrary.a -lopencv_calib3d246 -lopencv_contrib246 -lopencv_core246 -lopencv_features2d246 -lopencv_flann246 -lopencv_gpu246 -lopencv_highgui246 -lopencv_imgproc246 -lopencv_legacy246 -lopencv_ml246 -lopencv_nonfree246 -lopencv_objdetect246 -lopencv_photo246 -lopencv_stitching246 -lopencv_video246 -lopencv_videostab246

Eclipse本身的设置如下: 在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

可能这是一个新手问题,但我完全坚持这一点。我应该怎么做才能让它编译?

4

1 回答 1

1

据我所知,Asmlibrary 很难使用,而且不是开源的。你看过这个项目(见第 6 章) https://github.com/MasteringOpenCV/code吗?我认为这会更好。另请查看http://www.visionopen.com/downloads/open-source-software/vosm/。这些项目是开源的,并且比 asm 库有更好的描述。

于 2013-08-18T13:42:45.707 回答