首页 > 解决方案 > 在 Linux 上的 Hello_World 控制台应用程序中嵌入 V8 引擎 - GCC 7 链接器错误(未定义的引用)

问题描述

以下是详细信息:

主机/测试操作系统,工具链:

Linux Mint 19.3 Tricia (Ubuntu 18.04), GCC 7

V8 GN 构建参数:

is_debug=true
target_os="linux"
target_cpu="x64"
is_clang = false
is_component_build=false
use_glib=false
use_custom_libcxx = false
v8_static_library=true
v8_enable_i18n_support=false
v8_use_external_startup_data=false

v8 引擎构建成功,我得到了所有预期的静态库。然后我尝试构建 Hello_World 应用程序(在 v8 源代码中提供),与生成的静态 llib 链接。我收到以下链接错误:

/usr/bin/g++-7 -o ./build-Debug/bin/Hello_World @./build-Debug//ObjectsList.txt -L. -L../../out.gn/linux.x86_64.Debug -L../../out.gn/linux.x86_64.Debug/obj -L../../out.gn/linux.x86_64.Debug/obj/tools/debug_helper -L../../out.gn/linux.x86_64.Debug/obj/third_party/zlib -L../../out.gn/linux.x86_64.Debug/obj/third_party/zlib/google  -lv8_libbase -lv8_libplatform -lv8_base_without_compiler -lv8_bigint -lv8_compiler_opt -lv8_compiler -lv8_cppgc_shared -lv8_debug_helper -lv8_init -lv8_initializers -lv8_snapshot -lchrome_zlib -ltorque_base -ltorque_ls_base -ltorque_generated_initializers -ltorque_generated_definitions -lwee8 -lcompression_utils_portable -lpthread

../../out.gn/linux.x86_64.Debug/obj/torque_generated_initializers/promise-misc-tq-csa.o: In function `v8::internal::PromiseInit_0(v8::internal::compiler::CodeAssemblerState*, v8::internal::TNode<v8::internal::JSPromise>)':
/media/hongkun/Windows/Users/hongkun/v8/v8/out.gn/linux.x86_64.Debug/gen/torque-generated/src/builtins/promise-misc-tq-csa.cc:297: undefined reference to `v8::internal::PromiseBuiltinsAssembler::ZeroOutEmbedderOffsets(v8::internal::TNode<v8::internal::JSPromise>)'
../../out.gn/linux.x86_64.Debug/obj/torque_generated_initializers/promise-misc-tq-csa.o: In function `v8::internal::InnerNewJSPromise_0(v8::internal::compiler::CodeAssemblerState*, v8::internal::TNode<v8::internal::Context>)':
/media/hongkun/Windows/Users/hongkun/v8/v8/out.gn/linux.x86_64.Debug/gen/torque-generated/src/builtins/promise-misc-tq-csa.cc:377: undefined reference to `v8::internal::PromiseBuiltinsAssembler::AllocateJSPromise(v8::internal::TNode<v8::internal::Context>)'
../../out.gn/linux.x86_64.Debug/obj/torque_generated_initializers/promise-misc-tq-csa.o: In function `v8::internal::NewJSPromise_2(v8::internal::compiler::CodeAssemblerState*, v8::internal::TNode<v8::internal::Context>, v8::Promise::PromiseState, v8::internal::TNode<v8::internal::Object>)':
/media/hongkun/Windows/Users/hongkun/v8/v8/out.gn/linux.x86_64.Debug/gen/torque-generated/src/builtins/promise-misc-tq-csa.cc:1143: undefined reference to `v8::internal::PromiseBuiltinsAssembler::ZeroOutEmbedderOffsets(v8::internal::TNode<v8::internal::JSPromise>)'

显然,链接器在任何提供的库中都找不到类v8::internal::PromiseBuiltinsAssembler 。我在链接器选项中添加了所有生成的 v8 库。我该如何解决这个错误?感谢您的任何建议。

标签: linuxgccv8embedded-v8

解决方案


既不PromiseBuiltinsAssembler也不promise-misc-tq-csa.o应该进入最终的二进制文件,两者都仅供mksnapshot.

您是否尝试过遵循官方文档


推荐阅读