0

我正在尝试为 Android 构建 Chromium 代码并陷入elfutils使用 ninja -C opt/Full chrome_public_apk命令编译的困境,我将其视为异常

[30/21982] CC clang_x64/obj/third_party/elfutils/libelf/elf32_updatefile.o

失败:clang_x64/obj/third_party/elfutils/libelf/elf32_updatefile.o

-D_LARGEFILE64_SOURCE -D_DEBUG -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DWTF_USE_DYNAMIC_ANNOTATIONS=1 -D_GLIBCXX_DEBUG=1 -I../../third_party/elfutils -I../../third_party/elfutils/src/lib -I../.. - iclang_x64/gen -I../../third_party/elfutils/src/libelf -std=gnu99 -Wall -Wshadow -Werror -Wunused -Wextra -Wformat=2 -fno-strict-aliasing --param=ssp-buffer- size=4 -fstack-protector -funwind-tables -fPIC -pipe -B../../third_party/binutils/Linux_x64/Release/bin -fcolor-diagnostics -fdebug-prefix-map=/home/vcareall/Yogesh/公司代码/铬/src=。-pthread -m64 -march=x86-64 -O0 -g2 -gsplit-dwarf --sysroot=../../build/linux/debian_wheezy_amd64-sysroot -fvisibility=hidden -Xclang -load -Xclang ../.. /third_party/llvm-build/Release+Asserts/lib/libFindBadConstructs。

../../third_party/elfutils/src/libelf/elf32_updatefile.c:297:4:错误:此处不允许函数定义

{

^

../../third_party/elfutils/src/libelf/elf32_updatefile.c:331:7: 错误:函数“fill_mmap”的隐式声明在 C99 [-Werror,-Wimplicit-function-declaration] 中 无效>data.d.d_off);

^

产生 2 个错误。

[35/21982] CXX clang_x64/obj/third_party/android_protobuf/android_protoc/javamicro_file.o ninja:构建停止:子命令失败。

我不熟悉ninja构建系统的工作和配置。但我已经读过Clang它不会编译嵌套函数并且G++可以做到这一点。但我不知道如何设置 Ninja 以运行 G++ 来编译所有嵌套函数 C 代码。

有人对此有什么建议吗?

4

1 回答 1

1

您无法使用 clang 编译带有嵌套函数的代码。来自 clang 文档(https://clang.llvm.org/docs/UsersManual.html#gcc-extensions-not-implemented-yet):

clang 不支持嵌套函数;这是一个不经常使用的复杂功能,因此不太可能很快实现。

要将 g++ 与 ninja 一起使用,您可以更改环境变量 CC 和 CXX,如下所示(隐含基于 unix 的操作系统):

$ export CC=/path/to/gcc
$ export CXX=/path/to/g++

或者如果 ninja 不使用这些变量,则更改为 .ninja 文件clangg++

于 2017-01-22T17:42:45.663 回答