[版权声明] 本站内容采用 知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆 (CC BY-NC-SA 3.0 CN) 进行许可。
部分内容和资源来自网络,纯学习研究使用。如有侵犯您的权益,请及时联系我,我将尽快处理。
如转载请注明来自: Broly的博客,本文链接: LibVLC在Release版下出现异常
写了个MFC程序,需要用到LibVLC库,在编译debug版本的时候用的好好的,但是编译成release版后,打开就会出错!
刚开始还以为是其他库的问题呢,后来调试了下发现是LibVLC的问题,网上找到了解决方法:
解决方法:/OPT:REF 相关的问题
在项目 Properties->Linker->Optimization->References,将Yes(/OPT:REF)设置为No(/OPT:NOREF)
至于这个参数的作用,官网介绍如下:
/OPT:REF 清除从未引用的函数和/或数据,而 /OPT:NOREF 保留从未引用的函数和/或数据。
默认情况下,LINK 移除未引用的封装函数。 如果对象已经用 /Gy 选项编译过,它包含封装函数 (COMDAT)。 此优化称为可传递的 COMDAT 消除。 若要重写该默认值并在程序中保留未引用的 COMDAT,请指定 /OPT:NOREF。 可以使用 /INCLUDE 选项重写特定符号的移除。
通俗点的解释就是:
1 2 3 |
/OPT:REF的作用是:如果你定义并且实现了一个函数,但是这个函数从来都没有被调用过,那么在链接期间,这个函数将会被优化掉,即最终生成的可执行程序中不包含此函数的代码。 /OPT:NOREF的左右则与上述相反。即便一个函数从来没有被调用过,它也会保留在可执行程序中。这样会增加不必要的程序体积,如果编译debug版本,则默认此选项。 |
参考链接:《VLC的libvlc.dll在release版调用时出现异常解决方法 》
https://msdn.microsoft.com/zh-cn/library/bxwfs976(v=vs.80).aspx