[ 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.h
及web_local_frame_client.cc
最近的 *.gn
或者 *.gni
是 src/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",
]