最近在做sift方面的毕业设计,弄了一天终于把RobHess的SIFT程序调通了。虽然网上有很多相关博文,但是我还是想把我的调试的过程跟大家分享一下。由于工程没法在博文上传,所以有需要的可以在下方留言。RobHess的SIFT VC++程序可以在http://download.csdn.net/download/lampqiu/7719911下载。我下载了,没有积分的可以问我要。
好了,对于opencv在vs上的配置很多地方讲的已经很清楚了。我就说说gsl的配置吧。首先看看http://blog.sciencenet.cn/blog-858128-818441.html上面的配置吧。我也是根据它上面的步骤配置的。(一定要照着他说的做,不要想当然的,我之前就是,所以走了不少弯路。)
其中我遇到的问题:
1.在用VS2010生成libgsl.lib,libgslcblas.lib这两个文件时。我疑惑了很久。cd D:\Program Files\GnuWin32\lib 这句话输进去后按回车,
lib /machine:i386 /def:libgsl.def
lib /machine:i386 /def:libgslcblas.def 再将这两句一起复制进去。之前我就是忘了cd,一直搞不出来。然后就可以得到那两个库文件。
2.按他所说的添加文件目录。只需要添加包含目录(...GnuWin32\include;)和库目录(...GnuWin32\lib;)。我之前就是在包含目录的include后面加了/gsl,结果一直配置不成功。添加库文件就是上面生成的那两个库,这个没问题。最后就是博文里说的添加/D"GSL_DLL",我之前就是直接复制的,结果一直报错。
1>LINK : fatal error LNK1104: 无法打开文件“GSL_DLL.obj”(就是由于直接复制/D "GSL_DLL"时,D后面有个空格,需要去掉。还有就是别忘了D前面那一个斜杠,不然还是会报错。)
3.现在gsl算是配置成功了。运行它给的测试程序也可以成功。但是运行RobHess的SIFT程序时会出现这个错误。
utils.obj:-1: error: LNK2019: 无法解析的外部符号 _va_end,该符号在函数 _fatal_error 中被引用。
则在utils.c代码中找到va_start( ap, format );和va_end( ap );并将其注释起来即可。
自此RobHess的SIFT程序就算是编译成功了。