chromium 35 [ resolved using non-portable Microsoft search rules ] 编译错误的解决方法

01 [ error: #include resolved using non-portable Microsoft search rules as ] 解决方法

当引入新的头文件时,有时会提示一些依赖错误。
比如:在 media/filters/ffmpeg_demuxer.cc 中 引入头文件
···
#include “third_party/blink/public/web/web_local_frame.h”
#include “third_party/blink/public/web/web_local_frame_client.h”
···

会提示如下错误:

In file included from ../../media/filters/ffmpeg_demuxer.cc:5:
In file included from ../..\media/filters/ffmpeg_demuxer.h:53:
In file included from ../..\third_party/blink/public/web/web_local_frame_client.h:74:
In file included from ../..\third_party/blink/public/web/web_dom_message_event.h:38:
In file included from ../..\third_party/blink/public/web/web_document.h:40:
In file included from ../..\third_party/blink/public/web/web_frame.h:40:
In file included from ../..\third_party/blink/public/web/web_node.h:38:
In file included from ../..\v8/include/v8.h:29:
../..\v8/include/cppgc/common.h(9,10): error: #include resolved using non-portable Microsoft search rules as: ../..\v8/include/v8config.h [-Werror,-Wmicrosoft-include]
#include "v8config.h"  // NOLINT(build/include_directory)
         ^
1 error generated.
[2/165] CXX obj/media/blink/blink/webmediaplayer_impl.obj
ninja: build stopped: subcommand failed.

打开third_party/blink/public/web/web_local_frame_client.h 文件发现确实引用了v8.h

...
#include "v8/include/v8.h"
...

再查看v8.h,发现如下内容

...
#include "cppgc/common.h"
#include "v8-internal.h"  // NOLINT(build/include_directory)
#include "v8-version.h"   // NOLINT(build/include_directory)
#include "v8config.h"     // NOLINT(build/include_directory)
...

根据提示,查看web_local_frame_client.hweb_local_frame_client.cc最近的 *.gn 或者 *.gnisrc/third_party/blink/public/BUILD.gn。查看 src/third_party/blink/public/BUILD.gn 中 v8.h 相关的配置,发现如下一句内容。

...
config("blink_headers_config") {
  # Allow :blink_headers to include v8.h without linking to it.
  configs = [ "//v8:external_config" ]
}
...

猜测,配置依赖应该是 configs = [ "//v8:external_config" ]

于是,把 "//v8:external_config" 加入 目标的 BUILD.gn 中,即 src/media/filters/ffmpeg_demuxer.cc 相关的 src/media/filters/BUILD.gn 中。
查找 src/media/filters/ffmpeg_demuxer.cc 的对应配置信息,大约在如下位置加入后,编译通过

  configs += [
    # TODO(crbug.com/167187): Fix size_t to int truncations.
    "//build/config/compiler:no_size_t_to_int_warning",
    "//media:subcomponent_config",
    # 在如下位置加入v8的依赖
    "//v8:external_config",
  ]

02 debug版本缺少dll依赖配置的错误信息

如果调整了依赖,提示符号没有定义, lld-link: error: undefined symbol: ...,那可能是因为debug版本编译时,采用组件模式,会产生很多dll,刚好,你引入的内容,在另外一个dll里面。这样的话,可以为debug版本引入 xxxxxx.dll.lib 依赖.

/IMPLIB:./media.dll.lib /DLL /PDB:./media.dll.pdb @./media.dll.rsp
lld-link: error: undefined symbol: __declspec(dllimport) public: void __thiscall blink::BrowserInterfaceBrokerProxy::GetInterface(class mojo::GenericPendingReceiver) const
>>> referenced by .\..\..\media\filters\ffmpeg_demuxer.cc:1899
>>>               obj/media/filters/filters/ffmpeg_demuxer.obj:(private: void __thiscall media::FFmpegDemuxer::OrayInit(void))
[2/543] ACTION //components/resources:about_credits(//build/toolchain/win:win_clang_x86)
ninja: build stopped: subcommand failed.

比如:上面的修改刚好引用到了 blink_common.dll.lib

  libs = []
  # 在对应的libs里面,针对组件编译(Debug)加入需要的依赖
  if (is_component_build) {
    libs += ["blink_common.dll.lib",]
  }

03 too many errors emitted 错误

如果在多个 xxx.gn 中引入相同的代码文件,会出现如下提示,

lld-link: error: too many errors emitted, stopping now (use /errorlimit:0 to see all errors)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值