Ubuntu环境下编译V8

本文详细介绍了如何在Ubuntu 14.04环境下编译V8 JavaScript引擎,包括下载源码、配置NDK、编译x64和Android版本,以及解决编译过程中遇到的问题。在编译Android版本时,特别指出了需要使用android-ndk-r11c来避免错误,并提供了测试结果。
摘要由CSDN通过智能技术生成

Ubuntu版本:14.04

关于V8

V8是Google自己开发的高性能开源的JavaScript解析引擎。

下载源码

源码地址
根据文档中的介绍,首先看depot tools是否安装。
然后下载v8源码:

fetch v8

然后进行同步:

git pull origin
gclient sync

根据这个网站的提示,运行下面脚本来安装一些编译android版本v8依赖的软件包:

build/install-build-deps-android.sh

编译

下载NDK

下载地址

配置环境变量

修改.bashrc文件,加上:

export PATH=/******/android-ndk-r13b:$PATH

编译x64版本

make x64.release -j16 component=shared_library

library=shared或者component=shared_library会生成libv8.so。

进入out/x64.release目录,执行:

./hello-world

会有Hello, World!输出。

编译android版本

make android_arm.release -j16 component=shared_library android_ndk_root=/home/heqiang/heqiang/android/android-ndk-r11c

刚开始用的nkd版本是android-ndk-r12b,会报一系列的错误:

/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/cpu.o:cpu.cc:function v8::base::CPUInfo::CPUInfo(): error: undefined reference to 'operator new[](unsigned int)'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/cpu.o:cpu.cc:function v8::base::CPUInfo::ExtractField(char const*) const: error: undefined reference to 'operator new[](unsigned int)'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/cpu.o:cpu.cc:function v8::base::CPU::CPU(): error: undefined reference to 'operator delete[](void*)'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/cpu.o:cpu.cc:function v8::base::CPU::CPU(): error: undefined reference to 'operator delete[](void*)'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/cpu.o:cpu.cc:function v8::base::CPU::CPU(): error: undefined reference to 'operator delete[](void*)'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/cpu.o:cpu.cc:function v8::base::CPU::CPU(): error: undefined reference to 'operator delete[](void*)'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/debug/stack_trace.o:stack_trace.cc:function std::__ndk1::basic_ios<char, std::__ndk1::char_traits<char> >::~basic_ios(): error: undefined reference to 'operator delete(void*)'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/debug/stack_trace.o:stack_trace.cc:function std::__ndk1::basic_streambuf<char, std::__ndk1::char_traits<char> >::~basic_streambuf(): error: undefined reference to 'operator delete(void*)'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/debug/stack_trace.o:stack_trace.cc:function std::__ndk1::basic_stringbuf<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >::~basic_stringbuf(): error: undefined reference to 'operator delete(void*)'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/debug/stack_trace.o:stack_trace.cc:function std::__ndk1::basic_stringbuf<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >::~basic_stringbuf(): error: undefined reference to 'operator delete(void*)'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/debug/stack_trace.o:stack_trace.cc:function std::__ndk1::enable_if<std::__ndk1::__is_forward_iterator<char*>::value, void>::type std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >::__init<char*>(char*, char*): error: undefined reference to 'operator new(unsigned int)'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/debug/stack_trace.o:stack_trace.cc:function std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >::assign(char const*, unsigned int): error: undefined reference to 'operator new(unsigned int)'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/debug/stack_trace.o:stack_trace.cc:function std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >::__grow_by(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int): error: undefined reference to 'operator new(unsigned int)'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/logging.o:logging.cc:function std::__ndk1::ostreambuf_iterator<char, std::__ndk1::char_traits<char> > std::__ndk1::__pad_and_output<char, std::__ndk1::char_traits<char> >(std::__ndk1::ostreambuf_iterator<char, std::__ndk1::char_traits<char> >, char const*, char const*, char const*, std::__ndk1::ios_base&, char): error: undefined reference to 'operator new(unsigned int)'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/debug/stack_trace_android.o:stack_trace_android.cc:function (anonymous namespace)::TraceStackFrame(_Unwind_Context*, void*): error: undefined reference to '_Unwind_GetIP'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/platform/platform-posix.o:platform-posix.cc:function v8::base::OS::CommitPageSize(): error: undefined reference to '__cxa_guard_acquire'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/platform/platform-posix.o:platform-posix.cc:function v8::base::OS::CommitPageSize(): error: undefined reference to '__cxa_guard_release'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/platform/platform-posix.o:platform-posix.cc:vtable for v8::base::OS::MemoryMappedFile: error: undefined reference to '__cxa_pure_virtual'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/platform/platform-posix.o:platform-posix.cc:vtable for v8::base::OS::MemoryMappedFile: error: undefined reference to '__cxa_pure_virtual'
/home/heqiang/heqiang/test/v8/out/android_arm.release/obj.target/v8_libbase/src/base/platform/platform-posix.o:platform-posix.cc:vtable for v8::base::Thread: error: undefined reference to '__cxa_pure_virtual'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/exception.cpp:113: error: undefined reference to '__cxa_uncaught_exception'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/exception.cpp:184: error: undefined reference to '__cxa_decrement_exception_refcount'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/exception.cpp:202: error: undefined reference to '__cxa_increment_exception_refcount'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/exception.cpp:222: error: undefined reference to '__cxa_increment_exception_refcount'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/exception.cpp:223: error: undefined reference to '__cxa_decrement_exception_refcount'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/exception.cpp:273: error: undefined reference to '__cxa_current_primary_exception'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/exception.cpp:273: error: undefined reference to '__cxa_current_primary_exception'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/exception.cpp:184: error: undefined reference to '__cxa_decrement_exception_refcount'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/exception.cpp:184: error: undefined reference to '__cxa_decrement_exception_refcount'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/exception.cpp:260: error: undefined reference to 'std::terminate()'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/exception.cpp:202: error: undefined reference to '__cxa_increment_exception_refcount'
/home/heqiang/heqiang/android/v8-android_tools/ndk/sources/cxx-stl//llvm-libc++/libs/armeabi-v7a/libc++_static.a(exception.o)(.ARM.extab.text._ZNKSt16nested_exception14rethrow_nestedEv+0x0): error: undefined reference to '__gxx_personality_v0'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/exception.cpp:292: error: undefined reference to '__cxa_rethrow_primary_exception'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/exception.cpp:294: error: undefined reference to 'std::terminate()'
/home/heqiang/heqiang/android/v8-android_tools/ndk/sources/cxx-stl//llvm-libc++/libs/armeabi-v7a/libc++_static.a(exception.o):/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/exception.cpp:typeinfo for std::nested_exception: error: undefined reference to 'vtable for __cxxabiv1::__class_type_info'
/home/heqiang/heqiang/test/v8/third_party/binutils/Linux_x64/Release/bin/ld: the vtable symbol may be undefined because the class is missing its key function
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/ios.cpp:276: error: undefined reference to '__cxa_allocate_exception'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/ios.cpp:276: error: undefined reference to '__cxa_throw'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/ios.cpp:276: error: undefined reference to '__cxa_free_exception'
/home/heqiang/heqiang/android/v8-android_tools/ndk/sources/cxx-stl//llvm-libc++/libs/armeabi-v7a/libc++_static.a(ios.o)(.ARM.extab.text._ZNSt6__ndk18ios_base5clearEj+0x0): error: undefined reference to '__gxx_personality_v0'
/home/heqiang/heqiang/android/v8-android_tools/ndk/sources/cxx-stl//llvm-libc++/libs/armeabi-v7a/libc++_static.a(ios.o)(.ARM.extab.text._ZNSt6__ndk18ios_baseD2Ev+0x0): error: undefined reference to '__gxx_personality_v0'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/ios.cpp:326: error: undefined reference to '__cxa_allocate_exception'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/ios.cpp:326: error: undefined reference to 'std::bad_alloc::bad_alloc()'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/ios.cpp:326: error: undefined reference to '__cxa_throw'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/ios.cpp:335: error: undefined reference to '__cxa_allocate_exception'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/ios.cpp:335: error: undefined reference to 'std::bad_alloc::bad_alloc()'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/ios.cpp:335: error: undefined reference to '__cxa_throw'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/ios.cpp:344: error: undefined reference to '__cxa_allocate_exception'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/ios.cpp:344: error: undefined reference to 'std::bad_alloc::bad_alloc()'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/ios.cpp:344: error: undefined reference to '__cxa_throw'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/src/ios.cpp:319: error: undefined reference to 'std::bad_alloc::bad_alloc()'
/usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++/libcxx/include/memory:2630: error: undefined reference to 'typeinfo for std::bad_alloc'
/usr/local/google/buildbot/src/andr
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒江蓑笠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值