我的目标是为pnacl工具链创建一些新功能。在我这样做之前,我想我应该首先成功构建pnacl工具链。
[11/04 Update]
最后它有效。我做的一些包(bison,byacc,flex)没有安装并导致了这个问题。
[11/03 Update]
我使用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 --install toolchain / linux_x86 / pnacl_newlib
然后出现以下错误消息
gcc -DHAVE_CONFIG_H -I。 -I ../../../的src / binutils的/金 -I ../../../ src / binutils / gold -I ../../../ src / binutils / gold /../ include - I ../../../ src / binutils / gold /../ elfcpp -DLOCALEDIR =" \" / share / locale \"" -DBINDIR =" \" / bin中\"" -DTOOLBINDIR =" \" /臂-PC-的NaCl / BIN \"" -DTOOLLIBDIR =" \" /臂-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 = return-type] yyscript.c:1:1:错误:函数
声明不是原型[-Werror = strict-prototypes] cc1:错误: 无法识别的命令行选项" -Wno-unused-private-field" [-Werror] cc1:错误:无法识别的命令行选项 " -Wno-不需要的内部声明" [-Werror] cc1:错误: 无法识别的命令行选项" -Wno-unused-const-variable" [-Werror] cc1:错误:无法识别的命令行选项 " -Wno-绝对值" [-Werror] cc1:错误:无法识别的命令行 选项" -Wno-extended-offsetof" [-Werror] cc1:所有警告都是 作为错误处理[4]:*** [yyscript.o]错误1
如果我用默认的clang运行它来编译
toolchain_build / toolchain_build_pnacl.py --verbose --clobber --install toolchain / linux_x86 / pnacl_newlib
然后生成以下错误消息
/家庭/ albaforia / SVN / nativeclient / THIRD_PARTY / LLVM-构建/推出+断言/ bin中/铛 -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 =" \" /臂-PC-的NaCl / BIN \"" -DTOOLLIBDIR =" \" /臂-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(){return 0; } ^ ~~~ 1生成错误。 make [4]:*** [yyscript.o]错误1
答案 0 :(得分:2)
默认情况下,PNaCl工具链使用已下载的clang二进制文件构建,因为Google的自动构建器运行Ubuntu 12.04,并且这些系统上的gcc无法构建最新版本的LLVM。所以有两个选择:
如果您使用Chromium的depot_tools
来获取Native Client源,您可以轻松获取构建器使用的同一编译器的副本:从native_client
运行的父目录
tools/clang/scripts/update.sh
将在toolchain_build_pnacl.py
期望的目录中下载并安装clang。安装完成后,如果您使用DEPS
中的gclient
,则由原生客户depot_tools
挂钩会自动更新。
否则,您可以使用系统gcc使用--gcc
选项编译PNaCl工具链。这肯定适用于Ubuntu 14.04,就像我们开发PNaCl的系统一样。
顺便说一句,我已经启动了另一个document,其中有一些关于构建过程的详细信息(即使它的重点不是您感兴趣的内容),当然还有-h
的{{1}}标志及其来源。
答案 1 :(得分:1)
您可以发布有关错误的更多信息吗?您可能需要向上滚动一点(错误与构建的其他部分交错,因为它并行构建)。为了帮助调试,您还可以在特定目标上运行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命令。在任何情况下,我们都想解决您遇到的问题!
答案 2 :(得分:1)
要使用系统编译器而不是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环境,一切顺利进行。如果不安装其中一些目录,一些构建脚本可能会失败,但我不确定。