У меня есть статическая библиотека, экспортирующая функцию
time_t SomeClass::getTime();
После компиляции его имя искажается как
?getTime@SomeClass@@QAE_JXZ
Когда я пытаюсь использовать его, VS возвращает ошибку
error LNK2001: unresolved external symbol "public: long __thiscall SomeClass::getTime(void)" (?getTime@SomeClass@@QAEJXZ)
И я не знаю, что не так. Почему одна и та же функция искажается по-разному? Я скомпилировал оба проекта в одной Visual Studio, класс имеет один заголовок.
Пожалуйста помоги.
Включили ли вы файл .lib в свойство INPUT компоновщика?
Если у вас есть два проекта в одном решении, вы можете добавить библиотеку в качестве ссылки на основной проект: щелкнуть правой кнопкой мыши в главном проекте и ссылки.
Ура,
Проблема была в разнице в time_t
деклараций. Библиотека означает, что она 64-битная, но приложение ожидает 32-битное значение.
Остается вопрос: «Почему нет хорошей документации для искажения имен MSVS»? Я много читал, но не нашел подчеркивания в списке параметров.
Попробуйте восстановить весь проект.
Если это не работает, проверьте каталоги Visual Studio (заголовок, библиотеки)