谷歌pnacl:如何使用编译器/链接器
Google pnacl: how to use the compiler/linker
我想使用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
。
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 在 CMake 中为每个目标设置编译器/链接器标志
- CMake 库链接使用两个不同的编译器版本
- 使用Bazel构建具有不同编译器/链接器选项的C/C++依赖关系
- 编译器无法链接/查找 GLFW
- 编译器找不到链接的 OpenCV 库
- MSVC 编译器/链接器何时合成标量/矢量删除析构函数
- 编译 Fortran 和C++程序并从英特尔编译器链接
- 如何使用 cmake 来确保 C++14 编译器与实验文件系统 TS 库的链接?
- 编译器链接独立静态/动态库
- 链接QT5库会自动将额外的FPIC标志传递给NVCC编译器,并通过cmake Cause错误
- Rcpp:Magick++中的编译器和链接器标志
- 编译器链接器错误?
- 编译器和链接器如何处理类和函数
- PGI编译器中的CUDA工具包缺少链接.stub
- Clang编译器/链接器找不到x86_64架构的符号NSMenuItem
- 无法在不使用RTTI构建LLVM的情况下链接LLVM编译器教程程序
- 编译器链接器外部符号mhook_sethook
- 我的链接列表程序在代码块编译器(X0000000005)中以状态-1073741819终止
- 编译器/链接器错误