release版本程序调用libvlc接口出现异常


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上构建程序,一切正常:-)

你可能感兴趣的:(release版本程序调用libvlc接口出现异常)