我在交叉编译树莓派的Google v8库时遇到问题,并且在从站点编译官方样本时不断收到“非法说明”错误。这些是我遵循的步骤:

  • 下载交叉编译https://github.com/raspberrypi/tools/
  • 克隆v8 git https://chromium.googlesource.com/v8/v8.git
  • 从交叉编译工具中导出的CXX LINK指向arm-linux-gnueabihf-g++
  • 运行make arm.release armv7=false hardfp=on snapshot=off armfpu=vfp armfloatabi=hard -j5
  • 复制并从out / arm.release目录生成可执行文件shelld8到pi(Raspbian内核版本3.6.11),并且可以运行。
    这些步骤证明了交叉编译工具链是有效的。

  • 尝试运行链接到v8库的其他交叉编译软件时,会出现问题。例如来自https://developers.google.com/v8/get_started#intro的示例代码。
    使用此命令交叉编译代码(与示例相同,只是更改了编译器)
    arm-linux-gnueabihf-g++ -I. hello_world.cc -o hello_world -Wl,--start-group out/x64.release/obj.target/{tools/gyp/libv8_{base,libbase,snapshot,libplatform},third_party/icu/libicu{uc,i18n,data}}.a -Wl,--end-group -lrt -pthread
    

    当我将该代码复制到pi并运行它时,我得到SIGILL(非法指令)。

    注意:不使用v8库的交叉编译软件可以正常工作。主机上的x64 v8库也可以正常工作。

    在较新的内核版本上,shelld8也抛出了SIGILL,但后来我切换到较旧的版本3.6.11(较新的内核https://groups.google.com/forum/#!topic/v8-users/IPT9EeYK9bg出现问题),它们开始工作,但是编译后的示例代码仍然显示相同的问题。

    有没有类似的经历?关于如何克服这个问题有什么建议吗?

    最佳答案

    我找到了解决方案,这要归功于v8谷歌论坛。 https://groups.google.com/forum/#!topic/v8-users/LTppUbqNrzI

    问题在于应该争论。

    make arm arm_version=6 armfpu=vfp armfloatabi=hard
    

    关于c++ - 为树莓派交叉编译Google v8库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27862909/

    10-14 18:02