release版本程序调用libvlc接口出现异常
super.raymond.lu[at]gmail[dot]com
(转载请注明出处http://blog.csdn.net/raymond_lu_rl/article/details/7515900)
今天使用vlclib来读取视频文件,发现程序在debug模式下运行时正常,但是换成release模式编译就会出现问题。
在http://forum.videolan.org和http://stackoverflow.com/查了一下,发现不少人碰到这个问题。但是都没有比较好的解决的办法。
下面是回答得比较好的帖子:
http://forum.videolan.org/viewtopic.php?f=32&t=97146
1、有的说是函数调用约定的问题。
2、有的说是因为开了/OPT:REF 选项的问题,需要换成/OPT:NOREF选项。
虽然在VS2008下把Project->Linker->Optimization->References链接选项换成/OPT:NOREF,重新编译后可以正常运行。单是总觉得该编译选项的方式心里不踏实,总怕后面用到什么其它库后会有冲突。更加重要的是我在QT开发环境中找不到/OPT:NOREF选项,这样的话就无法使用Release版本发行调用libvlc的QT程序。
于是寻找其它的办法解决问题。
偶然的情况下,我用dumpbin 和lib命令生成的libvlc.lib文件重新构建release程序,发现竟然可以运行了。具体的方法如下:
http://wiki.videolan.org/GenerateLibFromDll
之前使用的lib文件是从vlc\sdk\lib烤过来的,和这个生成的lib竟然有这个区别。
使用重新生成的libvlc.lib分别在VS2008和QT上构建程序,一切正常:-)