我想使用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 "
...
我试着用这个东西挖掘一些Makefile,但到目前为止我只找到了this one,而且似乎已经过时了。我应该向工具传递哪些标志?
发布于 2013-04-09 13:56:31
正如您在回答中提到的,SDK中的Makefiles支持调用pnacl编译器。所有面向用户的工具都在$(SDK_ROOT)/toolchain/linux_x86_pnacl/newlib/bin
中,或者在Windows或Mac上与之相当的版本。当像普通编译器/链接器驱动程序一样使用时,pnacl-clang
(和pnacl-clang++
)将在编译时生成可移植的目标文件,并在链接时生成可移植的可执行文件(称为.pexe文件)。您可以使用pnacl-translate
工具将pexe转换为x86-64、x86-32或arm本机客户端可执行文件( nexe ),其使用方式与nacl-gcc生成的nexe文件的使用方式相同。不久还将支持直接使用pexe文件进行浏览器内翻译。
发布于 2013-04-07 22:22:12
好了,这就是我发现的。首先,随SDK分发的新Makefile确切地知道如何完成整个构建过程……我还没有找到这些。基本上,调用的clang++是$(SDK_ROOT)/toolchain/linux_x86_pnacl/newlib/bin/pnacl-clang++
,而不是host_x86_64
。
https://stackoverflow.com/questions/15863257
复制相似问题