20

我在 Visual Studio 2012 解决方案中有以下项目:

  • 本机(无/clr)静态库项目,/ZI用于编辑并继续编译。
  • C++/CLI DLL 项目,它引用了上面的静态库。

C++/CLI 项目生成时出现以下警告:

warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/OPT:LBR' specification

如果 /OPT:NOLBR 添加到 C++/CLI 项目的链接器选项中,则警告变为:

warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/INCREMENTAL:NO' specification

任何更改 C++/CLI 项目的增量链接设置的尝试都不会更改警告(C++/CLI 项目永远不会增量链接)。

我了解我将无法在 C++/CLI 项目中使用 Edit And Continue,因为这不受支持。实际上,在静态库项目中将 /ZI 更改为 /Zi(禁用编辑并继续)消除了警告,但我不能这样做 - 该库的其他非 CLR 使用者需要使用编辑并继续。

如何在不禁用静态库中的编辑并继续的情况下摆脱此警告(希望不为静态库的本机和 CLR 用户维护单独的构建配置)?我的意思是,有没有办法让链接器忽略/EDITANDCONTINUE嵌入在引用的静态库中的指令(与/NODEFAULTLIB可以忽略/DEFAULTLIB指令的方式大致相同)?

我创建了一个最小的 VS 解决方案来重现所描述的问题。

4

3 回答 3

18

由于“/OPT:LBR”规范

这是一条无意义的错误消息,链接器选项仅对 ARM 二进制文件有效。这只是一个错误,使用 /OPT:NOLBR 可以消除它的刺痛,您会得到真正的警告。

这是足够准确的,虽然它也没有赢得任何奖品,但您要求在静态库项目中提供编辑+继续支持,但这不适用于混合模式 .NET 程序集。未记录的 /IGNORE 链接器选项可用于禁止显示警告消息,但该选项被Chapell 列为“不可忽略的警告”

只要您不想更改静态库项目,就必须忍受这个警告。这是完全良性的。当你用 /Zi 重新编译它时你不会得到它。

于 2014-02-23T10:40:18.707 回答
1

没有别的办法

  • 在库中禁用“编辑并继续”
  • 为“编辑并继续 (/ZI)”和“程序数据库 (/Zi)”创建单独的构建配置

当然:我不知道 /ZI 和 /Zi 之间有一个预定义的宏来确定...所以您需要定义自己的预处理器指令来区分这些配置...

于 2014-02-23T09:01:54.130 回答
0

我遇到了同样的问题,发现唯一的解决方案是删除项目的 .vcxproj 和 .sln 文件并重新创建项目。但后来在同一个项目的旧副本中,我找到了更好的解决方案:我在 projectname.vcxproj 文件中将 Profile true 行更改为 Profile false,LNK4075 警告消失了。造成麻烦的是 Visual Studio Profiler。

于 2014-11-28T11:33:37.610 回答