OpenCV学习笔记 OpenCV_SVN静态库的编译 .
2011-09-06 10:33
633 查看
之前按照常规方式(http://www.opencv.org.cn/index.php/VC_2008_Express%E4%B8%8B%E5%AE%89%E8%A3%85OpenCV2.0/2.1)用Cmake和VS2008编译了OpenCV_SVN,都是生成动态链接库的,最近写的程序Release版需要静态连接库,于是边查Google边探索怎样生成和使用OpenCV的静态库。
一、参考《编译opencv2.1静态库》(http://blog.csdn.net/sophisticated/archive/2011/03/09/6234943.aspx),生成静态库。
1、在Cmake中去掉BUILD_EXAMPLES,BUILD_NEW_PYTHON_SUPPORT,BUILD_SHARED_LIBS,BUILD_TESTS,勾选OPENCV_BUILD_3RDPARTY_LIBS, WITH_JASPER, WITH_JPEG, WITH_PNG, WITH_TIFF 选项 (这里没有勾选WITH_OPENNI,如果需要使用应该要用
OpenNI 的源码另外生成相应的静态库)。
2、编译完成后,将静态库.lib文件覆盖复制到原来按常规方式生成的lib文件夹中,例如 VS2008_build/3rdparty/lib 和 VS2008_build/lib 。注意所编译的静态库中不包含 3rdparty 中的 videoInput64.lib 和 videoInput.lib ,这两个文件在 SVN 源码中直接提供,不需要编译生成。
二、使用时的常见问题
1、编译工程的Release版之前,先在项目属性—Configuration Properties—C/C++—Code Generation 的 Runtime Library 设置为Multi-threaded (/MT) 。
2、在 项目属性—Configuration Properties—Linker—Input 的 Additional Dependencies 中,除了加入基本的 opencv_***220.lib 外,还要加入第三方lib,即libjasper.lib , libjpeg.lib , libpng.lib , libtiff.lib , zlib.lib , opencv_lapack.lib
等,这些都与 opencv 的 core , highgui 等模块有关。
3、如果出现“error LNK2001: unresolved external symbol
__imp__CreateToolbarEx@52” 的错误,则 Additional Dependencies 中需添加comctl32.lib 。(参考《fatal error LNK1120:
1 unresolved externals》http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=1309&start=0&st=0&sk=t&sd=a)
4、如果出现“(cvcap_vfw.obj) : error LNK2001: unresolved external symbol_AVIFileRelease@4” 等错误,并不是opencv链接库的问题,而是opencv在调用win32下的vfw库,需要在
Additional Dependencies 中需加上vfw32.lib 这个系统库文件,才能顺利编译。(参考《Opencv中highgui静态链接库使用时error LNK2001的错误》http://hi.baidu.com/56908268/blog/item/0f619bef2ce6efe1ce1b3efb.html)
5、如果出现“fatal error LNK1104: cannot open file “atlthunk.lib””的错误,是因为VS2005以上版本的ATL和MFC库中已不再带有这个文件,因此一般情况下可去掉对atlthunk.lib 的引用。参考《directshow 问题 找不到 atlthunk.lib》(http://topic.csdn.net/u/20090709/11/f3f9a286-9ef4-4e83-8808-26fb52ad5cb5.html)18、19和26楼的方法,在项目的头文件stdafx.h
中添加如下代码:
view plaincopy to clipboardprint?
// TODO: reference additional headers your program requires here
//在这添加*************************************************************
#include
#pragma comment(linker, "/NODEFAULTLIB:atlthunk.lib")
#if (_ATL_VER < 0x0700)
namespace ATL
{
inline void * __stdcall __AllocStdCallThunk()
{
return ::HeapAlloc(::GetProcessHeap(), 0, sizeof(_stdcallthunk));
}
inline void __stdcall __FreeStdCallThunk(void *p)
{
::HeapFree(::GetProcessHeap(), 0, p);
}
};
#endif //(_ATL_VER < 0x0700)
//***************************************************************添加结束
如果确实需要用到 atlthunk.lib ,可以到这里(http://download.csdn.net/source/1672909)下载WDK7.0的ATL7.1,从中抽取出
atlthunk.lib,放到 $(VCInstallDir)atlmfc/lib 里。
一、参考《编译opencv2.1静态库》(http://blog.csdn.net/sophisticated/archive/2011/03/09/6234943.aspx),生成静态库。
1、在Cmake中去掉BUILD_EXAMPLES,BUILD_NEW_PYTHON_SUPPORT,BUILD_SHARED_LIBS,BUILD_TESTS,勾选OPENCV_BUILD_3RDPARTY_LIBS, WITH_JASPER, WITH_JPEG, WITH_PNG, WITH_TIFF 选项 (这里没有勾选WITH_OPENNI,如果需要使用应该要用
OpenNI 的源码另外生成相应的静态库)。
2、编译完成后,将静态库.lib文件覆盖复制到原来按常规方式生成的lib文件夹中,例如 VS2008_build/3rdparty/lib 和 VS2008_build/lib 。注意所编译的静态库中不包含 3rdparty 中的 videoInput64.lib 和 videoInput.lib ,这两个文件在 SVN 源码中直接提供,不需要编译生成。
二、使用时的常见问题
1、编译工程的Release版之前,先在项目属性—Configuration Properties—C/C++—Code Generation 的 Runtime Library 设置为Multi-threaded (/MT) 。
2、在 项目属性—Configuration Properties—Linker—Input 的 Additional Dependencies 中,除了加入基本的 opencv_***220.lib 外,还要加入第三方lib,即libjasper.lib , libjpeg.lib , libpng.lib , libtiff.lib , zlib.lib , opencv_lapack.lib
等,这些都与 opencv 的 core , highgui 等模块有关。
3、如果出现“error LNK2001: unresolved external symbol
__imp__CreateToolbarEx@52” 的错误,则 Additional Dependencies 中需添加comctl32.lib 。(参考《fatal error LNK1120:
1 unresolved externals》http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=1309&start=0&st=0&sk=t&sd=a)
4、如果出现“(cvcap_vfw.obj) : error LNK2001: unresolved external symbol_AVIFileRelease@4” 等错误,并不是opencv链接库的问题,而是opencv在调用win32下的vfw库,需要在
Additional Dependencies 中需加上vfw32.lib 这个系统库文件,才能顺利编译。(参考《Opencv中highgui静态链接库使用时error LNK2001的错误》http://hi.baidu.com/56908268/blog/item/0f619bef2ce6efe1ce1b3efb.html)
5、如果出现“fatal error LNK1104: cannot open file “atlthunk.lib””的错误,是因为VS2005以上版本的ATL和MFC库中已不再带有这个文件,因此一般情况下可去掉对atlthunk.lib 的引用。参考《directshow 问题 找不到 atlthunk.lib》(http://topic.csdn.net/u/20090709/11/f3f9a286-9ef4-4e83-8808-26fb52ad5cb5.html)18、19和26楼的方法,在项目的头文件stdafx.h
中添加如下代码:
view plaincopy to clipboardprint?
// TODO: reference additional headers your program requires here
//在这添加*************************************************************
#include
#pragma comment(linker, "/NODEFAULTLIB:atlthunk.lib")
#if (_ATL_VER < 0x0700)
namespace ATL
{
inline void * __stdcall __AllocStdCallThunk()
{
return ::HeapAlloc(::GetProcessHeap(), 0, sizeof(_stdcallthunk));
}
inline void __stdcall __FreeStdCallThunk(void *p)
{
::HeapFree(::GetProcessHeap(), 0, p);
}
};
#endif //(_ATL_VER < 0x0700)
//***************************************************************添加结束
如果确实需要用到 atlthunk.lib ,可以到这里(http://download.csdn.net/source/1672909)下载WDK7.0的ATL7.1,从中抽取出
atlthunk.lib,放到 $(VCInstallDir)atlmfc/lib 里。
相关文章推荐
- OpenCV学习笔记 OpenCV_SVN静态库的编译 .
- OpenCV学习笔记(22)OpenCV_SVN静态库的编译
- 学习OpenCV的学习笔记系列(二)源码编译及自带样例工程
- 学习OpenCV的学习笔记系列(二)源码编译及自带样例工程
- 【openCV学习笔记】【3】高斯模糊一张图片(_cvSmooth相关编译错误)
- 学习OpenCV的学习笔记系列(二)源码编译及自带样例工程
- OpenCV学习笔记一:OpenCV概览与配置编译
- 自己在linux上编译、链接、动态库和静态库的学习笔记
- pomelo学习笔记 (4) libpomelo 编译静态库加入cocos2d-x xcode 项目
- (一)OpenCV学习笔记——Linux下编译运行opencv程序
- OpenCV学习笔记(3)用VS2008编译OpenCV2.0源代码(编译错误已解决)
- OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己
- 自己在linux上编译、链接、动态库和静态库的学习笔记
- 学习OpenCV的学习笔记系列(二)源码编译及自带样例工程(转)
- OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住
- OpenCV学习笔记(22)OpenCV_SVN静态库的编译[转]
- CMake学习笔记(3)——编译静态库和动态库
- 自己在linux上编译、链接、动态库和静态库的学习笔记
- 【OpenCV学习笔记】之二:Mat使用的潜规则----对数据类型敏感
- OpenCV学习笔记(四十)——再谈OpenCV数据结构Mat详解