У меня есть программа, которая использует коннектор MySQL для связи с базой данных MySQL. Приложение работает нормально с помощью Visual Studio 2008. Я пытаюсь заставить приложение собираться с помощью Visual Studio 2010, и именно здесь начались проблемы.
MySQL Connector 1.05 не поддерживается с VS 2010, и у них нет бинарной версии 1.1.0, которая работает с VS 2010. Информация MySQL говорит о том, чтобы загрузить исходный код для Connector C ++ 1.10 и собрать с VS 2010 После долгой работы я его строю. Примеры запускаются.
Однако, когда я создаю свое приложение с помощью недавно созданного Connector C ++ 1.1.0, я получаю следующее сообщение об ошибке:
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 "private: void __thiscall Database_NS::Manager::initialize_db_driver(void)const " (?initialize_db_driver@Manager@Database_NS@@ABEXXZ)
Это вызвано следующей строкой источника:
sql::Driver * p_driver = sql::mysql::get_driver_instance();
Примеры MySQL Connector C ++ 1.1.0 используют приведенную выше строку и не вызывают ошибок.
Я попытался установить связь с mysqlconn-static.lib, mysqlconn.lib, mysqlclient.lib, libmysql.lib, но сообщение об ошибке сохраняется.
Интересным моментом является то, что в соответствии с VS 2010 в приведенной выше строке источника используется это объявление:
CPPCONN_PUBLIC_FUNC MySQL_Driver * get_driver_instance();
Обратите внимание на различные возвращаемые значения.
Когда я использую Visual Studio 2010 и пример проекта коннектора, VS 2010 не может найти объявление или объявление функции get_driver_instance()
, используемое connect.cpp
. Утверждение в моей программе является точным утверждением, используемым connect.cpp
, поскольку я скопировал его без каких-либо изменений.
Другие люди решили эту проблему с помощью другого драйвера. Тем не менее, я не хочу менять свой код, который работает с VS2008, если это не нужно.
В другом ответе на этот вопрос сказано, что нужно определить «mysqlcppconn_EXPORTS», но это тоже не сработало, также сообщается в комментарии к ответу.
Вот мои вопросы:
1. Кто-нибудь получил MySQL Connector 1.1.0 для работы с Visual Studio 2010?
Если да, ответьте пошаговым примером и укажите, является ли dll или статическая библиотека .
2. Как компилятор VS выбирает функцию get_driver_instance()
, которая возвращает MySQL_Driver *
, а не функцию, которая возвращает Driver *
?
Я даже не получаю никаких предупреждений или ошибок о неоднозначных функциях (поскольку перегрузка должна отличаться не только типом возвращаемого значения).
Я использую Visual Studio 2010 на Windows-7x64-bit, MySQL, Connector C ++ 1.1.0.
См. Также:
get_driver_instance () вылетает с Qt
неопределенная ссылка на 'get_driver_instance'
MySQL C ++ Connector: неопределенная ссылка на `get_driver_instance '
mysql-connector-c ++ - «get_driver_instance» не является членом «sql :: mysql»
Как исправить неразрешенный внешний символ из-за MySql Connector C ++?