Различия в искажении имени на одном и том же компиляторе, одинаковые настройки - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь связать ASSIMP с моим проектом в Windows 10 Visual Studio Community 2019 RC.Я построил ASSIMP с CMake и той же версией VS.Я связал файл lib, так что все работает.

mesh.obj : error LNK2019: unresolved external symbol
"public: class aiScene const * __cdecl Assimp::Importer::ReadFile(char const *,unsigned int)"
(?ReadFile@Importer@Assimp@@QEAAPEBVaiScene@@PEBDI@Z)
referenced in function
"public: static void __cdecl citrus::graphics::mesh::convertAnimationFromCollada(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)"
(?convertAnimationFromCollada@mesh@graphics@citrus@@SAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z)

Ключевая часть:

?ReadFile@Importer@Assimp@@QEAAPEBVaiScene@@PEBDI@Z

Когда я просматриваю символы в моем сгенерированном файле lib assimp, я вижу:

?ReadFile@Importer@Assimp@@QEAAPEBUaiScene@@PEBDI@Z

Итак, как вы можете видеть, имя немного отличается, с той разницей, что QEAAPEBV изменено на QEAAPEBU.Что может вызвать это?

1 Ответ

3 голосов
/ 27 марта 2019

Используя инструмент, подобный команде undname, мы находим два названия искаженных форм

public: class aiScene const * __ptr64 __cdecl Assimp::Importer::ReadFile(char const * __ptr64,unsigned int) __ptr64

и

public: struct aiScene const * __ptr64 __cdecl Assimp::Importer::ReadFile(char const * __ptr64,unsigned int) __ptr64

для V и Uверсии.Таким образом, вы можете видеть, что разница в том, что одно объявлено как class aiScene, а другое struct aiScene.

Где-то в вашем коде вы непоследовательно объявляете, что такое aiScene.

...