Я получаю неразрешенную ошибку внешнего символа при связывании моего кода с MySQL Connector C ++ 1.1.0.
Вот сообщение об ошибке:
6>database.lib(db_manager.obj) : error LNK2019: unresolved external symbol
"class sql::mysql::MySQL_Driver * __cdecl sql::mysql::get_driver_instance(void)" (?get_driver_instance@mysql@sql@@YAPAVMySQL_Driver@12@XZ)
referenced in function "class sql::mysql::MySQL_Driver * __cdecl sql::mysql::get_mysql_driver_instance(void)" (?get_mysql_driver_instance@mysql@sql@@YAPAVMySQL_Driver@12@XZ)
я использовал dumpbin
чтобы получить список символов в mysqlconn-static.lib и найти похожий символ:
COMDAT; sym= "class sql::mysql::MySQL_Driver * __cdecl sql::mysql::get_driver_instance(void)" (?get_driver_instance@mysql@sql@@YAPEAVMySQL_Driver@12@XZ)
Когда эти две строки выстроены в линию, разница выглядит следующим образом:
(?get_driver_instance@mysql@sql@@YAPEAVMySQL_Driver@12@XZ)
(?get_driver_instance@mysql@sql@@YAPAVMySQL_Driver@12@XZ)
Какая разница в управлении именами между YAPEAV
А ТАКЖЕ YAPAV
?
У меня есть идея, что моя проблема связана с несовместимостью между библиотекой MySQL Connector и тем, как я строю свой код.
Я искал в Интернете и обнаружил ошибку в MySQL Connector 1.1.0, но она была изменена на «не ошибка».
Я использую компиляцию Visual Studio 2010 для 32-битной цели с использованием 64-битной платформы.
MySQL, Connector C ++, является версией 1.1.0.
Инструмент MSVC undname
твой друг. Используя его, вы обнаружите, что
?get_driver_instance@mysql@sql@@YAPEAVMySQL_Driver@12@XZ
соответствует:
class sql::mysql::MySQL_Driver * __ptr64 __cdecl sql::mysql::get_driver_instance(void)
?get_driver_instance@mysql@sql@@YAPAVMySQL_Driver@12@XZ
соответствует:
class sql::mysql::MySQL_Driver * __cdecl sql::mysql::get_driver_instance(void)
Разница в том, __ptr64
украшение. Похоже, что вы создаете 32-битную программу, но связываетесь с библиотекой, созданной для 64-битной цели.
Других решений пока нет …