Поскольку у меня почти нет идей, и результаты Google уже достигли точки, где они достигли ~ 10 и меньше, я теперь перехожу сюда в надежде увидеть ответ или хотя бы подсказку, которая приведет меня к фактическому решение.
Я создаю проект, который можно распространять в виде исполняемого файла, библиотеки non-stati c и библиотеки stati c. Я хочу использовать библиотеку в проекте WPF (C#), поэтому я создал простую оболочку CLR.
Все это работало очень хорошо вплоть до самых последних изменений, внесенных в базовую библиотеку. Теперь я получаю ошибки связывания (всего 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
Проекты, оба можно найти здесь:
- Проект C ++ https://github.com/SQFvm/vm
- Проект C ++ / CLR https://github.com/SQFvm/ClrBridge
Был в состоянии получить избавиться от проблем LNK2028, добавив еще один разделительный слой (wrapper. cpp & wrapper.h), а затем поместив #pragma unmanaged
вверху файла cpp. Остались только номера LNK2019