我想使用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并且似乎过时了。我应该将哪些标志传递给工具?
答案 0 :(得分:3)
正如您在答案中提到的,SDK中的Makefile支持调用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文件进行浏览器内翻译。
答案 1 :(得分:0)
好的,这是我发现的。首先,与SDK一起发布的新Makefiles确切知道如何进行整个构建....我没有找到它们。基本上调用的clang ++是$(SDK_ROOT)/toolchain/linux_x86_pnacl/newlib/bin/pnacl-clang++
而不是host_x86_64
的那个。