问题
使用C/C++等语言,需要使用第三方程序库,这些函数通常会提供Lib,和Dll,比如说使用OpenCV开发图像处理,视觉软件,除了配置头文件目录(Include),和库文件目录(Lib)。程序运行时候,还需要提供动态链接库,否则,程序提示找不到dll错误。下面以OpenCV的配置说明。
方法
头文件和库文件目录的配置
将头文件目录和库文件配置如下,你对号入座即可。注意Win32和X64的不同,一般情况下选择Win32下的库即可。
动态链接库的配置
- 简单粗暴的方法
直接将dll复制到C:\Windows或者C:\Windows\System32目录下。警告若是你是64位的系统,请将64位dll(这里是OpenCV的64位dll)放在C:\Windows\System32,32位的dll放在C:\Windows\SysWOW64。为什么这样放,英文好的请看这里http://en.wikipedia.org/wiki/WoW64 中文好的请看这里http://baike.baidu.com/link?url=yXIlxPM2dIcuHv59tL7gGldOqqbO9oGC2byEMLlNtq0_tK99FeaQ7ZyQEP29bSwp_bV85xNJ-f17accEeYpYFa (^-^,其实微软这样设计系统,为了兼容32位程序)。 - 优雅的方式(极力推荐)
你可以建立一个系统变量,起个名字,这里我起名字叫做OpenCV300。Look the picture
然后在path里面添加完整的dll路径,在这里我是如此%OpenCV300%\build\x86\vc10\bin,请君对号入座,很简单的。
优雅的方式确实可以使我们的系统盘不至于那么乱。然后重新开机什么的,NO,这里只需要重启一下Visual Studio就可以了。(网上说重启开机什么哒全是骗人的,都是坏人)。环境变量只是系统设置一些变量参数,就像我们写C/C++那样,程序启动时候加载,也就是说每次Visual Studio启动的时候加载一次,中间你若更改了path设置,Visual Studio是不知道的。你把它关了,再打开就可以。
Lib的引用
Lib有Debug版本和Release版本,混淆使用,会出现意外的错误,例如imread读入图像为空等。我建议如下方式引用。
//include opencv lib
#ifdef _DEBUG
#pragma comment(lib, "opencv_core246d")
#pragma comment(lib, "opencv_imgproc246d")
#pragma comment(lib, "opencv_highgui246d")
#pragma comment(lib, "opencv_legacy246d")
#else
#pragma comment(lib, "opencv_core246")
#pragma comment(lib, "opencv_imgproc246")
#pragma comment(lib, "opencv_highgui246")
#pragma comment(lib, "opencv_legacy246")
#pragma comment(lib, "opencv_calib3d246")
#pragma comment(lib, "opencv_contrib246")
#pragma comment(lib, "opencv_core246")
#pragma comment(lib, "opencv_features2d246")
#pragma comment(lib, "opencv_flann246")
#pragma comment(lib, "opencv_gpu246")
#pragma comment(lib, "opencv_haartraining_engine")
#pragma comment(lib, "opencv_highgui246")
#pragma comment(lib, "opencv_imgproc246")
#pragma comment(lib, "opencv_legacy246")
#pragma comment(lib, "opencv_ml246")
#pragma comment(lib, "opencv_objdetect246")
#pragma comment(lib, "opencv_ts246")
#pragma comment(lib, "opencv_video246")
#endif
例如我使用的是OpenCV300版本,是将该代码写在一个头文件里面,起一个名字叫opencvlib300.h。然后放在VS的头文件目录下面,或者编译器可以找到的地方。
/***
*opencvlib300.h - definitions and declarations for math library
*
* Copyright (c) wincoder. All rights reserved.
*
*Purpose:
* This file contains constant definitions and external subroutine
* declarations for the math subroutine library.
* [ANSI/System V]
*
* [Public]
*
****/
#ifndef _INC_OPENCV300
#define _INC_OPENCV300
//include opencv lib
#ifdef _DEBUG
#pragma comment(lib, "opencv_ts300d")
#pragma comment(lib, "opencv_world300d")
#else
#pragma comment(lib, "opencv_ts300")
#pragma comment(lib, "opencv_world300")
#endif
#endif
在需要使用的头文件直接添加下面一行代码即可
#include <opencv300lib.h>
好了,可以愉快的开始编程之旅了。
转载请保留以下信息
作者 | 日期 | 联系方式 |
---|---|---|
风吹夏天 | 2015年5月27日 | wincoder@qq.com |