谷歌pnacl:如何使用编译器/链接器

Google pnacl: how to use the compiler/linker

本文关键字:链接 编译器 何使用 pnacl 谷歌      更新时间:2023-10-16

我想使用PNacl编译hello_world驱动程序;唯一的问题是,我不知道哪些选项传递给编译器。

概括一下,这里的目的是从。cc (c++文件)到。bc(一些我不太了解的llvm格式),再从那里到。pexe。

下面是我的尝试:

 $ TC_PATH=/opt/nacl/pepper_26/toolchain/linux_x86_pnacl/host_x86_64/bin
 $ $(TC_PATH)/clang++ hello_world.cc -o hello_world.bc -I/opt/nacl/pepper_26/include

那就行了。现在,链接步骤失败了:

 $ $(TC_PATH)/clang++ hello_world.bc -o hello_world
 /tmp/hello_world-l8UCWM.o: file not recognized: File format not recognized

如果我这样做

 $ $(TC_PATH)/clang++ hello_world.bc -o hello_world.pexe --verbose

我看到驱动程序正试图链接到我的系统链接器,这当然不会工作:

 ...
 "/usr/bin/ld" --eh-frame-hdr "
 ...

我试图挖掘一些Makefiles使用的东西,但到目前为止,我只找到了这个,似乎过时了。我应该将哪些标志传递给工具?

正如您在回答中提到的,SDK中的makefile支持调用pnacl编译器。所有面向用户的工具都在$(SDK_ROOT)/toolchain/linux_x86_pnacl/newlib/bin当像普通编译器/链接器驱动程序一样使用时,pnacl-clang(和pnacl-clang++)将在编译时生成可移植的目标文件,并在链接时生成可移植的可执行文件(称为.pexe文件)。您可以使用pnacl-translate工具将pxe转换为x86-64、x86-32或arm本机客户端可执行文件(nexe),其使用方式与使用nacl-gcc生成的nexe文件相同。很快还将支持直接使用pexe文件进行浏览器内翻译。

好的,这是我的发现。首先,随SDK一起发布的新Makefiles确切地知道如何完成整个构建....我没有找到。基本上clang++调用的是$(SDK_ROOT)/toolchain/linux_x86_pnacl/newlib/bin/pnacl-clang++而不是host_x86_64