C++ cli LNK2028 LNK2029编译静态c++;托管c++/clr

C++ cli LNK2028 LNK2029编译静态c++;托管c++/clr,c++-cli,linker-errors,C++ Cli,Linker Errors,由于我几乎没有什么想法,而且谷歌的搜索结果现在已经达到了10点或更少,我现在转到这里,希望看到答案,或者至少是一条线索,引导我找到实际的解决方案 我正在创建一个可以作为可执行文件、非静态库和静态库分发的项目。 我想在WPF项目(C#)中使用该库,这就是为什么我创建了一个简单的CLR包装器 在基础库引入最新的更改之前,所有这些都工作得非常好。 现在,我在库项目中对“main”类的所有调用中都出现了链接错误(总共5个): 1>wrapper.obj : error LNK2028: unres

由于我几乎没有什么想法,而且谷歌的搜索结果现在已经达到了10点或更少,我现在转到这里,希望看到答案,或者至少是一条线索,引导我找到实际的解决方案

我正在创建一个可以作为可执行文件、非静态库和静态库分发的项目。 我想在WPF项目(C#)中使用该库,这就是为什么我创建了一个简单的CLR包装器

在基础库引入最新的更改之前,所有这些都工作得非常好。 现在,我在库项目中对“main”类的所有调用中都出现了链接错误(总共5个):

1>wrapper.obj : error LNK2028: unresolved token (0A0016EB) "public: class std::vector<struct sqf::diagnostics::stackdump,class std::allocator<struct sqf::diagnostics::stackdump> > __thiscall sqf::vmstack::dump_callstack_diff(class std::shared_ptr<class sqf::callstack>)" (?dump_callstack_diff@vmstack@sqf@@$$FQAE?AV?$vector@Ustackdump@diagnostics@sqf@@V?$allocator@Ustackdump@diagnostics@sqf@@@std@@@std@@V?$shared_ptr@Vcallstack@sqf@@@4@@Z) referenced in function "public: class std::vector<struct sqf::diagnostics::stackdump,class std::allocator<struct sqf::diagnostics::stackdump> > __thiscall SqfVm::wrapper::get_stackdump(void)" (?get_stackdump@wrapper@SqfVm@@$$FQAE?AV?$vector@Ustackdump@diagnostics@sqf@@V?$allocator@Ustackdump@diagnostics@sqf@@@std@@@std@@XZ)
1>wrapper.obj : error LNK2028: unresolved token (0A0016F5) "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall sqf::virtualmachine::preprocess(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,bool &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?preprocess@virtualmachine@sqf@@$$FQAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V34@AA_N0@Z) referenced in function "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall SqfVm::wrapper::preprocess(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,bool &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?preprocess@wrapper@SqfVm@@$$FQAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V34@AA_N0@Z)
1>wrapper.obj : error LNK2028: unresolved token (0A0016F6) "public: struct sqf::parse::astnode __thiscall sqf::virtualmachine::parse_sqf_cst(class std::basic_string_view<char,struct std::char_traits<char> >,bool &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?parse_sqf_cst@virtualmachine@sqf@@$$FQAE?AUastnode@parse@2@V?$basic_string_view@DU?$char_traits@D@std@@@std@@AA_NV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@6@@Z) referenced in function "public: struct sqf::parse::astnode __thiscall sqf::virtualmachine::parse_sqf_cst(class std::basic_string_view<char,struct std::char_traits<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?parse_sqf_cst@virtualmachine@sqf@@$$FQAE?AUastnode@parse@2@V?$basic_string_view@DU?$char_traits@D@std@@@std@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@6@@Z)
1>wrapper.obj : error LNK2019: unresolved external symbol "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall sqf::virtualmachine::preprocess(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,bool &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?preprocess@virtualmachine@sqf@@$$FQAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V34@AA_N0@Z) referenced in function "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall SqfVm::wrapper::preprocess(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,bool &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?preprocess@wrapper@SqfVm@@$$FQAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V34@AA_N0@Z)
1>wrapper.obj : error LNK2019: unresolved external symbol "public: struct sqf::parse::astnode __thiscall sqf::virtualmachine::parse_sqf_cst(class std::basic_string_view<char,struct std::char_traits<char> >,bool &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?parse_sqf_cst@virtualmachine@sqf@@$$FQAE?AUastnode@parse@2@V?$basic_string_view@DU?$char_traits@D@std@@@std@@AA_NV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@6@@Z) referenced in function "public: struct sqf::parse::astnode __thiscall sqf::virtualmachine::parse_sqf_cst(class std::basic_string_view<char,struct std::char_traits<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?parse_sqf_cst@virtualmachine@sqf@@$$FQAE?AUastnode@parse@2@V?$basic_string_view@DU?$char_traits@D@std@@@std@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@6@@Z)
1>wrapper.obj : error LNK2019: unresolved external symbol "public: class std::vector<struct sqf::diagnostics::stackdump,class std::allocator<struct sqf::diagnostics::stackdump> > __thiscall sqf::vmstack::dump_callstack_diff(class std::shared_ptr<class sqf::callstack>)" (?dump_callstack_diff@vmstack@sqf@@$$FQAE?AV?$vector@Ustackdump@diagnostics@sqf@@V?$allocator@Ustackdump@diagnostics@sqf@@@std@@@std@@V?$shared_ptr@Vcallstack@sqf@@@4@@Z) referenced in function "public: class std::vector<struct sqf::diagnostics::stackdump,class std::allocator<struct sqf::diagnostics::stackdump> > __thiscall SqfVm::wrapper::get_stackdump(void)" (?get_stackdump@wrapper@SqfVm@@$$FQAE?AV?$vector@Ustackdump@diagnostics@sqf@@V?$allocator@Ustackdump@diagnostics@sqf@@@std@@@std@@XZ)
1>wrapper.obj : error LNK2019: unresolved external symbol "public: __thiscall sqf::virtualmachine::virtualmachine(class Logger &,unsigned __int64)" (??0virtualmachine@sqf@@QAE@AAVLogger@@_K@Z) referenced in function "public: __thiscall sqf::virtualmachine::virtualmachine(class Logger &)" (??0virtualmachine@sqf@@QAE@AAVLogger@@@Z)
1>D:\Git\SQFvm\clrBridge\Release\clrBridge.dll : fatal error LNK1120: 7 unresolved externals
1>wrapper.obj:error LNK2028:未解析令牌(0A0016EB)“public:class std::vector\u thiscall sqf::vmstack::dump\u callstack\u diff(class std::shared\u ptr)”(?dump\u callstack_diff@vmstack@sqf@$$FQAE?AV$vector@Ustackdump@diagnostics@sqf@@V$allocator@Ustackdump@diagnostics@sqf@@@std@@@std@@V?$shared_ptr@Vcallstack@sqf@@@4@@Z)在函数“public:class std::vector u thiscall SqfVm::wrapper::get_stackdump(void)”中引用(?get_stackdump@wrapper@SqfVm@$$FQAE?AV$vector@Ustackdump@diagnostics@sqf@@V$allocator@Ustackdump@diagnostics@sqf@@@std@@@std@@XZ)
1> wrapper.obj:错误LNK2028:未解析的令牌(0A0016F5)“public:class std::basic_string\u thiscall sqf::virtualmachine::preprocess(class std::basic_string,bool&,class std::basic_string)”(?preprocess@virtualmachine@sqf@$$FQAE?AV?$basic_string@DU?$char_traits@D@性病病毒$allocator@D@2@@std@@V34@AA_N0@Z) 在函数中引用“public:class std::basic_string uu thiscall SqfVm::wrapper::preprocess(class std::basic_string,bool&,class std::basic_string)”(?preprocess@wrapper@SqfVm@$$FQAE?AV?$basic_string@DU?$char_traits@D@性病病毒$allocator@D@2@@std@@V34@AA_N0@Z)
1> wrapper.obj:错误LNK2028:未解析的令牌(0A0016F6)“public:struct sqf::parse::astnode\u thiscall sqf::virtualmachine::parse\u sqf\u cst(class std::basic\u string\u view,bool&,class std::basic\u string)”(?parseu sqf)_cst@virtualmachine@sqf@$$FQAE?AUastnode@parse@2@V?$basic\u字符串_view@DU?$char_traits@D@std@@@std@@AA_NV?$basic_string@DU?$char_traits@D@性病病毒$allocator@D@2@@6@@Z)在函数“public:struct sqf::parse::astnode\uu thiscall sqf::virtualmachine::parse\u sqf\u cst(类std::basic_string_视图,类std::basic_string)”中引用(?parseu sqf)_cst@virtualmachine@sqf@$$FQAE?AUastnode@parse@2@V?$basic\u字符串_view@DU?$char_traits@D@std@@@std@@V?$basic_string@DU?$char_traits@D@性病病毒$allocator@D@2@@6@@Z)
1> wrapper.obj:错误LNK2019:未解析的外部符号“public:class std::basic_string uu thiscall sqf::virtualmachine::preprocess(class std::basic_string,bool&,class std::basic_string)”(?preprocess@virtualmachine@sqf@$$FQAE?AV?$basic_string@DU?$char_traits@D@性病病毒$allocator@D@2@@std@@V34@AA_N0@Z) 在函数中引用”public:class std::basic_string uu thiscall SqfVm::wrapper::preprocess(class std::basic_string,bool&,class std::basic_string)”(?preprocess@wrapper@SqfVm@$$FQAE?AV?$basic_string@DU?$char_traits@D@性病病毒$allocator@D@2@@std@@V34@AA_N0@Z)
1> wrapper.obj:错误LNK2019:未解析的外部符号“public:struct sqf::parse::astnode\uu thiscall sqf::virtualmachine::parse\u sqf\u cst(class std::basic\u string\u view,bool&,class std::basic\u string)”(?parseu sqf)_cst@virtualmachine@sqf@$$FQAE?AUastnode@parse@2@V?$basic\u字符串_view@DU?$char_traits@D@std@@@std@@AA_NV?$basic_string@DU?$char_traits@D@性病病毒$allocator@D@2@@6@@Z)在函数“public:struct sqf::parse::astnode\uu thiscall sqf::virtualmachine::parse\u sqf\u cst(类std::basic_string_视图,类std::basic_string)”中引用(?parseu sqf)_cst@virtualmachine@sqf@$$FQAE?AUastnode@parse@2@V?$basic\u字符串_view@DU?$char_traits@D@std@@@std@@V?$basic_string@DU?$char_traits@D@性病病毒$allocator@D@2@@6@@Z)
1> wrapper.obj:错误LNK2019:未解析的外部符号“public:class std::vector\uu thiscall sqf::vmstack::dump\u callstack\u diff(class std::shared\u ptr)”(?dump\u callstack)_diff@vmstack@sqf@$$FQAE?AV$vector@Ustackdump@diagnostics@sqf@@V$allocator@Ustackdump@diagnostics@sqf@@@std@@@std@@V?$shared_ptr@Vcallstack@sqf@@@4@@Z)在函数“”中引用public:class std::vector uu thiscall SqfVm::wrapper::get_stackdump(void)”(?get_stackdump@wrapper@SqfVm@$$FQAE?AV$vector@Ustackdump@diagnostics@sqf@@V$allocator@Ustackdump@diagnostics@sqf@@@std@@@std@@XZ)
1> wrapper.obj:错误LNK2019:未解析的外部符号“public:u thiscall sqf::virtualmachine::virtualmachine(类记录器&,未签名的u int64)”(??0virtualmachine@sqf@@QAE@AAVLogger@@_K@Z)在函数“public:u thiscall sqf::virtualmachine::virtualmachine(类记录器&)”中引用(?)??0virtualmachine@sqf@@QAE@AAVLogger@@@Z)
1> D:\Git\SQFvm\clrBridge\Release\clrBridge.dll:致命错误LNK1120:7个未解析的外部
这些项目都可以在这里找到:

C++项目
  • C++/CLR项目

  • 通过添加另一个分离层(wrapper.cpp和wrapper.h),然后在cpp文件的顶部添加一个
    #pragma unmanaged
    ,可以解决LNK2028问题。
    现在只剩下LNK2019问题了

    对于将来可能会发现此问题的用户,以下是帮助我的内容:

  • 区分所有类别
  • #pragma managed
    添加到实际类的非托管包装中(去掉LNK2028)
  • 下列行为之一:

  • 希望这对你有帮助