最近开始回过头来做一些视觉方面的工作。重新着手使用自己笔记本上配的工作环境。
工作环境:win7 32bit + vs2010 + opencv244
关于opencv的编译和配置,当时主要参考的是如下这篇博文。
http://www.cnblogs.com/freedomshe/archive/2013/01/11/win7_vs2012_opencv_rebuild.html
----------------------------------
现在重新开始在vs环境下使用opencv,先用最简单的highgui函数熟悉下使用流程测试下库有没有问题。然后还真发现问题了。
1. debug下,库配置正确,运行正常无问题。
2. release下,库配置也正确,但是在生成完要运行时,出现问题:
第一反应是tbb.dll的路径配置不正确。于是查看系统设置下环境变量中的path项下是否正确输入了tbb.dll所在路径。查看后发现无误,而且确实应该无误,如果有错误的话那么debug版本的dll也会出现类似的问题。
然后尝试 把path路径下的tbb.dll文件拷贝至项目的可执行文件.exe所在的路径下,重新运行项目,发现运行成功了。
这下更奇怪了。感觉是默认运行的时候调用的tbb.dll文件不是我希望调用的版本。超出能力范围了,需要求助。
------------------------------------
1. 在stackoverflow上,找到了一篇对于“无法定位程序输入点”问题有较好描述的帖子
其中提到,出现这种错误,很大可能是因为,在生成exe时所使用的lib文件的版本,和在运行exe时所调用的dll的版本不一致。
考虑到我在生成exe时使用的lib对应的dll文件确实存在,但没有得到正确的调用,所以必须了解exe文件在运行时寻找和调用dll文件的搜索路径。
2. 通过百度查找到该博文 dll目录查找顺序
文中阐明了可执行文件在运行时寻找和调用dll文件的路径搜索顺序。一般是:
A 可执行文件所在目录;
B 进程当前目录;
C 系统目录,%SystemRoot%/system32
D 16位系统目录;,%SystemRoot%/system
E Windows目录,%SystemRoot%/
F 环境变量PATH中的目录;
果不其然,我在自己电脑的C:\Windows\System32文件夹下发现了另外的tbb.dll。。。。不知道啥时候自带的呢,额,替换之或删除之,问题即可解决
3.通过2中的博文,可以看到利用filemon监视工具是个观察搜索路径顺序的不错工具
有空参见 filemon监视工具的使用,今天受限于时间先略过。
4.如下两篇msdn上的资料帮我重新梳理了windows下动态链接库调用方面的知识,在此一并表示感谢
https://msdn.microsoft.com/zh-cn/library/253b8k2c.aspx
https://msdn.microsoft.com/zh-cn/library/7d83bc18.aspx