【问题标题】:Google pnacl: how to use the compiler/linkerGoogle pnacl:如何使用编译器/链接器
【发布时间】:2013-04-07 14:03:42
【问题描述】:

我想用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 并且似乎已经过时了。我应该将哪些标志传递给工具?

【问题讨论】:

    标签: c++ google-nativeclient


    【解决方案1】:

    正如您在回答中提到的,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 文件进行浏览器内翻译。

    【讨论】:

      【解决方案2】:

      好的,这就是我找到的。首先,与 SDK 一起分发的新 Makefile 确切地知道如何进行整个构建......我没有找到那些。基本上调用的clang++是$(SDK_ROOT)/toolchain/linux_x86_pnacl/newlib/bin/pnacl-clang++,而不是host_x86_64

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-12
        • 1970-01-01
        • 2014-02-26
        • 1970-01-01
        • 1970-01-01
        • 2016-03-19
        • 2021-03-08
        • 2018-06-05
        相关资源
        最近更新 更多