编译第一个opencv测试程序

来源:互联网 发布:java编写仓库管理 编辑:程序博客网 时间:2024/06/07 03:21
g++ -o test1 test1.cpp -I/usr/local/include -I/usr/local/include/opencv -I/usr/local/include/opencv2 -L/usr/local/lib /usr/local/lib/*.so

未定义的引用:

没有链接到库文件,这样导致函数没有定义,可以增加编译选项。

解决步骤:

1. 查看pkg-config是否有opencv,命令:pkg-config opencv --libs

    
如果有,进行第2部,如果没有,那么考虑pkg重新配置,如下:
  
在/usr/local/lib/pkgconfig/下有opencv.pc,我里面的内容如下:

Package Information for pkg-config

# Package Information for pkg-configprefix=/usr/localexec_prefix=${prefix}libdir=includedir_old=${prefix}/include/opencvincludedir_new=${prefix}/includeName: OpenCVDescription: Open Source Computer Vision LibraryVersion: 3.0.0Libs:  ${exec_prefix}/lib/libopencv_calib3d.so ${exec_prefix}/lib/libopencv_core.so ${exec_prefix}/lib/libopencv_cudaarithm.so ${exec_prefix}/lib/libopencv_cudabgsegm.so ${exec_prefix}/lib/libopencv_cudacodec.so ${exec_prefix}/lib/libopencv_cudafeatures2d.so ${exec_prefix}/lib/libopencv_cudafilters.so ${exec_prefix}/lib/libopencv_cudaimgproc.so ${exec_prefix}/lib/libopencv_cudalegacy.so ${exec_prefix}/lib/libopencv_cudaobjdetect.so ${exec_prefix}/lib/libopencv_cudaoptflow.so ${exec_prefix}/lib/libopencv_cudastereo.so ${exec_prefix}/lib/libopencv_cudawarping.so ${exec_prefix}/lib/libopencv_cudev.so ${exec_prefix}/lib/libopencv_features2d.so ${exec_prefix}/lib/libopencv_flann.so ${exec_prefix}/lib/libopencv_hal.a ${exec_prefix}/lib/libopencv_highgui.so ${exec_prefix}/lib/libopencv_imgcodecs.so ${exec_prefix}/lib/libopencv_imgproc.so ${exec_prefix}/lib/libopencv_ml.so ${exec_prefix}/lib/libopencv_objdetect.so ${exec_prefix}/lib/libopencv_photo.so ${exec_prefix}/lib/libopencv_shape.so ${exec_prefix}/lib/libopencv_stitching.so ${exec_prefix}/lib/libopencv_superres.so ${exec_prefix}/lib/libopencv_ts.a ${exec_prefix}/lib/libopencv_video.so ${exec_prefix}/lib/libopencv_videoio.so ${exec_prefix}/lib/libopencv_videostab.soCflags: -I${includedir_old} -I${includedir_new}

可以按照这种格式进行重新的配置

 2. 简便指令

g++ -o testrect testrect.cpp `pkg-config opencv --cflags --libs`

  注意,这里是`(反斜号)而非(单引号)

 如果我们不是空pkg管理器, 那么, 我们编译的时候,需要添加如下的指令(不包含大括号):

g++ -o{输出文件}  {要编译文件} -I{你的OpenCV头文件的目录,可以重复指定}  -L{你的OpenCV库文件的目录} {要连接的动态库,可以使用通配符}

比如:
g++ -odemo.a demo.cpp -I/usr/local/include -I/usr/local/include/opencv -I/usr/local/include/opencv2 -L/usr/local/lib /usr/local/opencv/*.so

3.更近一步的优化:

如果, 在Linux使用的是Code::Blocks进行代码的书写,那么,这一步,对Code::Blocks环境进行配置。
配置环境无非是设定两个方面:
编译的时候头文件的寻找地方
我的opencv使用的是默认安装方式,其头文件位于/usr/local/include/opencv 和 /usr/local/include/opencv2下
那么, 我们只需要将这两个文件设定为编译的寻找位置,不同版本的Code::Blocks有不同的设定方式,我的设定方式则是在:
Settings>Compiler>Global Compiler Setting>Search directories>Add
弹出对话框,增加即可,当一切都搞好的时候,您会发现,并不理想,仔细看一下opencv2文件夹的内容,您自然
会发现,opencv2下有文件夹存在,所以,我们需要吧opencv2下的所有的文件夹按照上面的方式加入到Search目录。
链接的时候动态库的寻找地方
我的opencv的库文件都坐落于/usr/local/lib, 按照同样的方法添加:
Settings>Compiler>Global Compiler Setting>Link Settings>Add
因为在搜索的时候是以文件为单位进行搜索的,所以,使用痛配符来表示
/usr/local/lib/*
添加至其中即可。

0 0