【发布时间】:2020-06-07 20:00:53
【问题描述】:
我正在尝试从Getting started with embedding V8 构建和运行 hello-world.cc 示例。我正在从 Linux x86(Windows 10 Native OS 上的 Hyper-V Ubuntu 虚拟机)交叉编译到 Linux Arm64(恰好是 NVIDIA Jetson Nano)。
当我运行示例时,它挂在v8::V8::Initialize 函数中。
我不确定出了什么问题。但我会尽力概述我采取的步骤。
在 x86 构建系统(虚拟机)上。
我根据these instructions检查了depot_tools并做了相关的后续步骤(更新为gclient sync和./build/install-build-deps.sh
我根据these instructions获取v8,做了glient sync。
我从零开始构建忍者:
git clone git://github.com/ninja-build/ninja.git && cd ninja
git checkout release
cat README.md
./configure.py --bootstrap
cp ninja /usr/local/bin
我安装了clang
sudo apt-get install clang-7 clang-tools-7 clang-7-doc libclang-common-7-dev libclang-7-dev libclang1-7 clang-format-7 python-clang-7
cd /usr/bin
sudo ln -s ../lib/llvm-7/bin/clang clang
sudo ln -s ../lib/llvm-7/bin/clang++ clang++
我设置了 gn
gn
git clone https://gn.googlesource.com/gn
cd gn
python build/gen.py
ninja -C out
然后我尝试构建 V8:
cd ~/v8/v8
/home/username/gn/out/gn gen out.gn/arm64.release
/home/username/gn/out/gn args out.gn/arm64.release
我使用了这些 gn 参数:
is_debug = false
target_cpu = "arm64"
v8_target_cpu = "arm64"
v8_monolithic = true
v8_use_external_startup_data = false
target_os = "linux"
然后我将 out.gn/aarch64.release 文件夹复制到目标 arm 机器上并尝试在该机器上编译示例。
在 Arm64 机器上
clang++ -I. -Iinclude src/hello-world.cc -o hello_world -lv8_monolith -Lout.gn/arm64.release/obj -pthread -stdlib=libc++ -DV8_COMPRESS_POINTERS
./hello_world
这个例子挂在v8::V8::Initialize。我通过在 hello-world.cc 文件的每一行之后添加打印语句来验证这一点。
我可能忽略了在这篇文章中提供有关安装一些构建要素的详细信息(我之前已经从这个 VM 构建了其他东西,所以已经有一段时间了。)我也忽略了详细说明我基本上是如何进行对称检查的Arm 系统上的 v8(我实际上并没有在那个系统上构建 v8。)
我能够在 VM 中为 x86 构建 V8,并在该系统上构建和运行 hello-world 嵌入示例。但是为 Arm 进行交叉编译并尝试在 Arm 系统上构建和运行示例,它只是在初始化期间挂起。
我不知道我可能做错了什么或进一步调查什么。
更新
堆栈似乎在下面:v8::internal::ComputeFlagListHash()
#0 0x0000000000408e80 in std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::push_back(char)@plt ()
#1 0x0000000000469064 in std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int) ()
#2 0x0000007fb7f1eb24 in std::__1::basic_streambuf<char, std::__1::char_traits<char> >::xsputn(char const*, long) () from /usr/lib/aarch64-linux-gnu/libc++.so.1
#3 0x000000000040a6ec in std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) ()
#4 0x000000000040a1d4 in std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) ()
#5 0x00000000004c7184 in v8::internal::ComputeFlagListHash() ()
#6 0x00000000005af44c in v8::internal::V8::InitializeOncePerProcessImpl() ()
#7 0x0000000000adf744 in v8::base::CallOnceImpl(std::__1::atomic<unsigned char>*, std::__1::function<void ()>) ()
#8 0x00000000005af318 in v8::internal::V8::Initialize() ()
#9 0x000000000042e5f4 in v8::V8::Initialize(int) ()
#10 0x0000000000409b88 in main ()
我担心这可能与浮点指令集有关。
仅供参考:/proc/cpuinfo:
processor : 0
model name : ARMv8 Processor rev 1 (v8l)
BogoMIPS : 38.40
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x1
CPU part : 0xd07
CPU revision : 1
(...实际输出重复 4 个处理器)
【问题讨论】:
标签: arm cross-compiling v8