【发布时间】:2022-12-22 15:39:33
【问题描述】:
我是制作 C++ 项目的新手。我可能不确定 C++ 项目的先决条件知识。
[我的环境]
- Windows 10
- 蟒蛇 2.7.18
- VS 2022 的开发人员命令提示符
- Visual Studio 2022 社区
我目前正在努力将 V8 引擎制作成 DLL 并使用它。
我已成功将 V8 引擎构建为 DLL,但使用它时遇到“无法解析外部符号”错误。
细节:
error LNK2019: unresolved external symbol "class std::unique_ptr<class v8::Platform,struct std::default_delete<class v8::Platform> > __cdecl v8::platform::NewDefaultPlatform(int,enum v8::platform::IdleTaskSupport,enum v8::platform::InProcessStackDumping,class std::unique_ptr<class v8::TracingController,struct std::default_delete<class v8::TracingController> >)" (?NewDefaultPlatform@platform@v8@@YA?AV?$unique_ptr@VPlatform@v8@@U?$default_delete@VPlatform@v8@@@std@@@std@@HW4IdleTaskSupport@12@W4InProcessStackDumping@12@V?$unique_ptr@VTracingController@v8@@U?$default_delete@VTracingController@v8@@@std@@@4@@Z) referenced in function "public: __cdecl ezv8::Platform::Impl::Impl(void)" (??0Impl@Platform@ezv8@@QEAA@XZ)
我研究了一些 C++ 处理和编译器行为的东西。
我注意到 v8_libplatform.dll.lib 文件包含其他类型的损坏符号,如下所示。
?NewDefaultPlatform@platform@v8@@YA?AV?$unique_ptr@VPlatform@v8@@U?$default_delete@VPlatform@v8@@@__1@std@@@__1@std@@HW4IdleTaskSupport@12@W4InProcessStackDumping@12@V?$unique_ptr@VTracingController@v8@@U?$default_delete@VTracingController@v8@@@__1@std@@@45@@Z = ?NewDefaultPlatform@platform@v8@@YA?AV?$unique_ptr@VPlatform@v8@@U?$default_delete@VPlatform@v8@@@__1@std@@@__1@std@@HW4IdleTaskSupport@12@W4InProcessStackDumping@12@V?$unique_ptr@VTracingController@v8@@U?$default_delete@VTracingController@v8@@@__1@std@@@45@@Z (class std::__1::unique_ptr<class v8::Platform,struct std::__1::default_delete<class v8::Platform> > __cdecl v8::platform::NewDefaultPlatform(int,enum v8::platform::IdleTaskSupport,enum v8::platform::InProcessStackDumping,class std::__1::unique_ptr<class v8::TracingController,struct std::__1::default_delete<class v8::TracingController> >))
如您所见,.lib 文件包含带有 __1 命名空间的符号。
我发现了为什么该文件包含该文件。捆绑的 clang 编译器使用内联命名空间 __1 编译 std 命名空间,但我不确定如何在没有 __1 内联命名空间的情况下更改编译。
有谁知道如何改变编译器的行为?
【问题讨论】:
标签: c++ visual-studio clang v8 ninja