我正在尝试为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
  
  ../../third_party/llvm-build/Release+Asserts/bin/clang -MMD -MF
  clang_x64 / obj / third_party / elfutils / libelf / elf32_updatefile.o.d
  -D_GNU_SOURCE -DHAVE_CONFIG_H -DV8_DEPRECATION_WARNINGS -DENABLE_MDNS = 1 -DENABLE_NOTIFICATIONS -DENABLE_PEPPER_CDMS -DENABLE_PLUGINS = 1 -DENABLE_PDF = 1 -DENABLE_PRINTING = 1 -DENABLE_BASIC_PRINTING = 1 = DEN_USED-USED-USED-USED-USED-USED -DUSE_CAIRO = 1 -DUSE_CLIPBOARD_AURAX11 = 1 -DUSE_DEFAULT_RENDER_THEME = 1 -DUSE_GLIB = 1 -DUSE_NSS_CERTS = 1 -DUSE_X11 = 1 -DENABLE_WEBRTC = 1 -DENABLE_EXTENSIONS = 1 -DENABLE_TASK_MANAGER = 1 -DENABLE_ABLED-ABLES_ABLES -ABLES_ABLES -ABLES-DESDES = 1 -DENABLE_SERVICE_DISCOVERY = 1 -DFULL_SAFE_BROWSING -DSAFE_BROWSING_CSD -DSAFE_BROWSING_DB_LOCAL -DCHROMIUM_BUILD -DENABLE_MEDIA_ROUTER = 1 -DFIELDTRIAL_TESTING_ENABLED -DCR_CLANG_REVISION = 274369-1 -D_FILE_OFFSET_BITS = 64 -D_LARGEFILE_SOURCE -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 / el futils / 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 / CompanyCode / chromium / 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.so
  -Xclang-添加插件-Xclang查找坏的构造-Xclang -plugin-arg-发现的不良-constructs -Xclang检查模板-Xclang -plugin-arg-发现的不良-constructs -Xclang Follow-macro-expansion- Xclang -plugin-arg-find-bad-constructs -Xclang check-implicit-copy-ctors -Xclang -plugin-arg-find-bad-constructs -Xclang check-ipc -Wheader-卫生-Wstring-conversion -Werror -Wall- Wno的未使用变量-Wno的缺少字段初始化器-Wno的未使用参数-Wno-c ++ 11变窄-Wno覆盖的开关默认值-Wno弃用的寄存器-Wno不需要的内部声明-Wno不一致的丢失覆盖-Wno移位负值-Wno不确定的变量模板-Wno-nonportable-include-path -c ../../third_party/elfutils/src/libelf/elf32_updatefile。 -
  clang_x64 / obj / third_party / elfutils / libelf / elf32_updatefile.o
  
  ../../third_party/elfutils/src/libelf/elf32_updatefile.c:297:4:错误:此处不允许使用函数定义
  
  {
  
  ^
  
  ../../third_party/elfutils/src/libelf/elf32_updatefile.c:331:7:错误:函数“ fill_mmap”的隐式声明在C99中无效
  [-错误,-隐式函数声明]
                       fill_mmap(dl-> data.d.d_off);
  
  ^
  
  产生2个错误。
  
  [35/21982] CXX
  clang_x64 / obj / third_party / android_protobuf / android_protoc / javamicro_file.o
  ninja:构建已停止:子命令失败。


我对使用和配置ninja构建系统不熟悉。
但是我已经读过关于Clang的信息,它不会编译嵌套函数,而G++可以做到。
但是我不知道如何设置忍者运行G ++来编译所有嵌套函数C代码。

有人对此有任何建议吗?

最佳答案

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


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


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

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


如果ninja不使用这些变量,请在.ninja文件中将clang更改为g++

关于android - 在Chromuim(Android)中使用Clang为elf_utils编译嵌套函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38697214/

10-11 18:37