Неразрешенный символ: sql :: mysql :: get_driver_instance (void) - PullRequest
3 голосов
/ 20 августа 2011

У меня есть программа, которая использует коннектор 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 ++?

Ответы [ 2 ]

1 голос
/ 20 октября 2011

Некоторые имена функций изменены. Мое лучшее решение - различать их с помощью условных выражений препроцессора.

0 голосов
/ 18 октября 2011

У меня тоже та же проблема, я продолжаю получать:

*sampletest.obj : error LNK2001: unresolved external symbol __imp__get_driver_instance*

Хотя я попробовал 32-битный соединитель, и проблема была решена (вы можете попробовать это как, если вам повезет, этоработать на вас), но я использовал 64-битную MySQL, Windows 7, поэтому была проблема совместимости .. Я все еще ищу решение для вышеуказанной проблемы.

Следуя инструкциям слово в слово, соединили все библиотеки. Я думаю, что у коннектора C ++ 1.10 может быть какая-то проблема.

...