码迷,mamicode.com
首页 > 其他好文 > 详细

解决mingw动态库在vs下调用 release版本中会出现的奇怪问题

时间:2015-01-23 18:34:07      阅读:502      评论:0      收藏:0      [点我收藏+]

标签:


REF | NOREF

/OPT:REF 清除从未引用的函数和/或数据,而 /OPT:NOREF 保留从未引用的函数和/或数据。

默认情况下,LINK 移除未引用的封装函数。 如果对象已经用 /Gy 选项编译过,它包含封装函数 (COMDAT)。 此优化称为可传递的 COMDAT 消除。 若要重写该默认值并在程序中保留未引用的 COMDAT,请指定 /OPT:NOREF。 可以使用 /INCLUDE 选项重写特定符号的移除。

如果指定了 /DEBUG/OPT 的默认项是 NOREF(否则,为 REF),而且所有函数都保留在映像中。 若要重写此默认项并优化调试生成,请指定 /OPT:REF /OPT:REF 选项禁用增量链接。

必须显式地将数据标记为 COMDAT;使用 __declspec(selectany)

如果指定了 /OPT:REF,默认情况下 /OPT:ICF 处于打开状态。 如果需要 /OPT:REF 而不是 /OPT:ICF,则必须指定下面的内容:

link /opt:ref /opt:noicf

指定 /OPT:ICF 不激活 /OPT:REF 选项。

https://msdn.microsoft.com/zh-cn/library/vstudio/bxwfs976(v=vs.110).aspx



在vs中有下面这样一个选项,当vs调用mingw编译出的.dll.a时文件时,在debug模式下没有问题在release下会有各种奇怪错误,这时候将release模式选项里的上面这个选项关掉就可以了。

许多开源项目比如ffmpeg x264等都只提供mingw平台的编译,而没有提供vs平台的编译。由于vs不支持C99,如果要强行用vs编译,要修改好多错误才能编译通过,工作量大而且改得人头疼。另外每次开源软件更新还要重新再修改一遍。所以在mingw下编译出动态库,然后拿到VS下用感觉是个非常不错的选择,遇到会有上面问题。查了好久没有查到,自己摸索好久摸索出来。(在VS2010下测试通过,其他版本VS未测试)


REF | NOREF

/OPT:REF 清除从未引用的函数和/或数据,而 /OPT:NOREF 保留从未引用的函数和/或数据。

默认情况下,LINK 移除未引用的封装函数。 如果对象已经用 /Gy 选项编译过,它包含封装函数 (COMDAT)。 此优化称为可传递的 COMDAT 消除。 若要重写该默认值并在程序中保留未引用的 COMDAT,请指定 /OPT:NOREF。 可以使用 /INCLUDE 选项重写特定符号的移除。

如果指定了 /DEBUG/OPT 的默认项是 NOREF(否则,为 REF),而且所有函数都保留在映像中。 若要重写此默认项并优化调试生成,请指定 /OPT:REF /OPT:REF 选项禁用增量链接。

必须显式地将数据标记为 COMDAT;使用 __declspec(selectany)

如果指定了 /OPT:REF,默认情况下 /OPT:ICF 处于打开状态。 如果需要 /OPT:REF 而不是 /OPT:ICF,则必须指定下面的内容:

link /opt:ref /opt:noicf

指定 /OPT:ICF 不激活 /OPT:REF 选项。


解决mingw动态库在vs下调用 release版本中会出现的奇怪问题

标签:

原文地址:http://blog.csdn.net/langsim/article/details/43057257

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!