【问题标题】:How to build pnacl toolchain如何构建 pnacl 工具链
【发布时间】:2014-12-23 21:53:13
【问题描述】:

我的目标是为 pnacl 工具链添加一些新功能。在我这样做之前,我认为我应该先成功构建 pnacl 工具链。

[11/04 更新]

终于成功了。一些包(bison、byacc、flex)我没有安装并导致了这个问题。

[11/03 更新]

我使用 ubuntu-14.04.1-desktop-amd64 作为我的系统

另外,ubuntu-12.04.5-desktop-amd64 正在测试 [11/03 更新]

我一直跟着the document的步骤。一切都很好,直到我运行 toolchain_build_pnacl 脚本

所以我在这里添加新的错误信息:

如果我使用 gcc 运行脚本进行编译

toolchain_build/toolchain_build_pnacl.py --gcc --verbose --sync --clobber --安装工具链/linux_x86/pnacl_newlib

那么下面的错误信息就是

gcc -DHAVE_CONFIG_H -I。 -I../../../src/binutils/gold -I../../../src/binutils/gold -I../../../src/binutils/gold/../include -I../../../src/ binutils/gold/../elfcpp -DLOCALEDIR="\"/share/locale\"" -DBINDIR="\"/bin\"" -DTOOLBINDIR="\"/arm-pc-nacl/bin\"" -DTOOLLIBDIR="\"/arm-pc-nacl/lib\"" -W -Wall - Wstrict-prototypes -Wmissing-prototypes -Wshadow -Werror -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -frandom-seed=yyscript.o -Wno-extended-offsetof -Wno-absolute-value -Wno-unused-function -Wno-unused-const-变量 -Wno-unneeded-internal-declaration -Wno-unused-private-field -Wno-format-security -MT yyscript.o -MD -MP -MF .deps/yyscript.Tpo -c -o yyscript.o yyscript.c yyscript.c:1:1:错误:返回类型默认为'int' [-Werror=return-type] yyscript.c:1:1:错误:函数

声明不是原型 [-Werror=strict-prototypes] cc1: error: 无法识别的命令行选项“-Wno-unused-private-field”[-Werror] cc1:错误:无法识别的命令行选项 “-Wno-unneeded-internal-declaration”[-Werror] cc1:错误: 无法识别的命令行选项“-Wno-unused-const-variable” [-Werror] cc1:错误:无法识别的命令行选项 “-Wno-absolute-value”[-Werror] cc1:错误:无法识别的命令行 选项“-Wno-extended-offsetof”[-Werror] cc1:所有警告都是 视为错误 make[4]: *** [yyscript.o] 错误 1

如果我用默认的 clang 运行它来编译

toolchain_build/toolchain_build_pnacl.py --verbose --clobber --安装工具链/linux_x86/pnacl_newlib

然后生成以下错误消息

/home/albaforia/SVN/nativeclient/third_party/llvm-build/Release+Asserts/bin/clang -DHAVE_CONFIG_H -I。 -I../../../src/binutils/gold -I../../../src/binutils/gold -I../../../src/binutils/gold/. ./include -I../../../src/binutils/gold/../elfcpp -DLOCALEDIR="\"/share/locale\"" -DBINDIR="\"/bin\"" -DTOOLBINDIR ="\"/arm-pc-nacl/bin\"" -DTOOLLIBDIR="\"/arm-pc-nacl/lib\"" -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Werror -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -frandom-seed=yyscript.o -Wno-extended-offsetof -Wno-absolute-value -Wno-unused-function -Wno-unused-const-variable -Wno-unneeded-internal-declaration -Wno-unused -private-field -Wno-format-security -MT yyscript.o -MD -MP -MF .deps/yyscript.Tpo -c -o yyscript.o yyscript.c yyscript.c:1:1:错误:缺少类型说明符, 默认为 'int' [-Werror,-Wimplicit-int] main() { 返回 0; } ^~~~ 产生 1 个错误。 make[4]: *** [yyscript.o] 错误 1

【问题讨论】:

    标签: build google-nativeclient toolchain


    【解决方案1】:

    默认情况下,PNaCl 工具链使用下载的 clang 二进制文件构建,因为 Google 的自动构建器运行 Ubuntu 12.04,而这些系统上的 gcc 无法构建最新版本的 LLVM。所以有2个选项: 如果您使用 Chromium 的 depot_tools 获取 Native Client 源代码,您可以轻松获取构建者使用的相同编译器的副本:从 native_client 的父目录运行 tools/clang/scripts/update.sh 将下载并安装 clang 到 toolchain_build_pnacl.py 期望的目录中。安装后,如果您使用来自depot_toolsgclient,Native Clients DEPS 挂钩将自动保持最新。

    否则您可以使用系统 gcc 使用 --gcc 选项编译 PNaCl 工具链。这绝对可以在 Ubuntu 14.04 上运行,就像我们开发 PNaCl 的系统一样。

    顺便说一句,我已经开始了另一个document,其中包含有关构建过程的更多详细信息(即使它的重点不是您感兴趣的),当然还有-h 标志toolchain_build_pnacl.py 及其来源。

    【讨论】:

    • 感谢您对我的大力帮助。 tools/clang/scripts/update.sh 获取正确版本的 clang!但是构建仍然失败。甚至使用 --gcc 而不是 clang。
    • 你能发布错误信息吗?在这一点上,这与您最初提出的问题完全不同。我不知道您是否应该将这个问题标记为已回答并开始一个新问题,或者只是编辑原始问题或什么......
    • 我这次更新了。如果这个问题仍然存在,我将为它提出一个新问题并参考这个问题。谢谢你的建议。
    【解决方案2】:

    要使用系统编译器而不是来自third_party/llvm_build/... 的编译器,您可能需要将--gcc 选项传递给构建脚本。不过,您仍然不太可能在 Ubuntu 14.04 下成功构建工具链。

    我使用的是 Ubuntu 14.04,为了构建 pnacl 工具链,我设置了 Ubuntu 12.04 chroot environment。在其中,我可以使用以下命令成功构建工具链:

    # get sources for NaCl itself
    gclient config http://src.chromium.org/native_client/trunk/src/native_client@13992 --name native_client
    gclient sync -j16
    
    cd native_client
    # sync sources for binutils, llvm, etc.
    toolchain_build/toolchain_build_pnacl.py --verbose --sync-only
    # build and install toolchain
    toolchain_build/toolchain_build_pnacl.py --verbose --gcc --install install_dir
    

    PS: 我将/proc/dev/dev/pts/sys/run/run/shm/tmp 挂载到我的 chroot 环境中,一切运行顺利。如果不安装其中一些目录,一些构建脚本可能会失败,尽管我不确定。

    【讨论】:

    • 感谢您的帮助:) 而且...是的,如您所说,将 --gcc 传递给它时仍然出错。稍后我将更改尝试将我的系统更改为 Ububtu 12.04 并重新构建。
    • 我做了一些努力将我的系统更改为与您描述的系统相似。但它仍然不起作用。你能告诉我更具体的系统细节吗?包括硬件、主机的 OS 系统和 chroot 环境,或者一些可能很重要的东西。提前致谢。
    • 我的主机系统是 Ubuntu 14.04 (amd64)。 Chroot 系统是 Ubuntu 12.04 (amd64)。 CPU是i7-2600,虽然我认为硬件在这里并不重要。如果没有错误消息,很难猜测您的情况出了什么问题。可能是你缺少 chroot 中安装的一些软件包。
    【解决方案3】:

    您能否发布有关错误原因的更多信息?您可能需要向上滚动一点(错误与构建的其他部分交错,因为它是并行构建的)。为了帮助调试,您还可以在特定目标上运行 toolchain_build/toolchain_build_pnacl.py 并减少正在进行的构建量,例如你可以这样做:

    toolchain_build/toolchain_build_pnacl.py llvm_x86_64_linux --verbose --install toolchain/linux_x86/pnacl_newlib
    

    仅供参考,当您重新运行 toolchain_build/toolchain_build_pnacl.py 脚本时,您无需重新指定 --sync 和 --clobber。

    您也可以在调试问题时手动运行 make 命令。无论如何,我们希望解决您遇到的问题!

    【讨论】:

    • 感谢您的帮助。我发现这是由于缺少 llvm 编译器造成的。我通过添加错误消息的更多信息来编辑我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2012-03-27
    • 1970-01-01
    • 2017-01-31
    • 2011-07-03
    • 2020-01-23
    • 2013-02-01
    相关资源
    最近更新 更多