在Linux上的Hello_World connsole应用程序中嵌入V8引擎-GCC 7链接器错误(未定义引用)

在Linux上的Hello_World connsole应用程序中嵌入V8引擎-GCC 7链接器错误(未定义引用),linux,gcc,v8,embedded-v8,Linux,Gcc,V8,Embedded V8,详情如下: 主机/测试操作系统,工具链: Linux Mint 19.3 Tricia (Ubuntu 18.04), GCC 7 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_enabl

详情如下:

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

Linux Mint 19.3 Tricia (Ubuntu 18.04), GCC 7
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
v8gn构建参数:

Linux Mint 19.3 Tricia (Ubuntu 18.04), GCC 7
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>)'
/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/tools/Debug_helper-L..//out.gn/linux.x86_64.Debug/obj/third_/zlib-L..//out.gn/linux.x86_/libu/libu第三方调试-L../lib-lv8_libplatform-lv8_base_without_compiler-lv8_compiler-lv8_opt-lv8_compiler-lv8_cppgc_shared-lv8_debug_helper-lv8_init-lv8_initializers-lv8_snapshot-lchrome_zlib-ltorque_base-ltorque_base-ls-ltorque_生成的_initializer-ltorque_生成的_-ltorque_定义-lwee8-lcompu-utils可移植线程
../../out.gn/linux.x86_64.Debug/obj/torque_生成的_初始化器/promise misc tq csa.o:在函数'v8::internal::PromiseInit_0(v8::internal::compiler::CodeAssemblerState*,v8::internal::TNode'):
/media/hongkun/Windows/Users/hongkun/v8/v8/out.gn/linux.x86_64.Debug/gen/torque generated/src/builtins/promise misc tq csa.cc:297:未定义对“v8::internal::PromiseBuiltinsAssembler::Zerooutembeddedrofsets(v8::internal::TNode)”的引用
../../out.gn/linux.x86_64.Debug/obj/torque_生成的_初始化器/promise misc tq csa.o:在函数'v8::internal::InnerNewJSPromise_0(v8::internal::compiler::CodeAssemblerState*,v8::internal::TNode'):
/media/hongkun/Windows/Users/hongkun/v8/v8/out.gn/linux.x86_64.Debug/gen/torque generated/src/builtins/promise misc tq csa.cc:377:未定义对“v8::internal::PromiseBuiltinsAssembler::AllocateJSPromise(v8::internal::TNode)”的引用
../../out.gn/linux.x86_64.Debug/obj/torque_生成的_初始值设定项/promise misc tq csa.o:In函数'v8::internal::NewJSPromise_2(v8::internal::compiler::CodeAssemblerState*,v8::internal::TNode,v8::PromiseState,v8::internal::TNode)':
/media/hongkun/Windows/Users/hongkun/v8/v8/out.gn/linux.x86_64.Debug/gen/torque generated/src/builtins/promise misc tq csa.cc:1143:未定义对“v8::internal::PromiseBuiltinsAssembler::Zerooutembeddedrofsets(v8::internal::TNode)”的引用
显然,链接器在任何提供的库中都找不到类v8::internal::PromiseBuiltinsAssembler。我已经在链接器选项中添加了所有生成的v8库。
如何修复此错误?感谢您的建议。

无论是
PromiseBuiltinsAssembler
还是
promise misc tq csa.o
都不应进入最终二进制文件,两者都仅由
mksnapshot
使用


您是否尝试过遵循?

坦率地说,这只是我构建v8并将其嵌入应用程序的第三天。在过去的两天里,我让它在Windows和macOS上工作。今天我开始在Linux上做。我试着遵循官方文件,但可能不是100%准确。是否有我应该使用的GN构建选项来避免此问题?仔细检查v8官方文档,Linux的说明与Windows/macOS的说明没有太大差异(构建依赖项除外),因此我不知道Linux遗漏了什么。遵循官方说明(包括此处提到的GN参数和命令行)避免了此问题。