【发布时间】:2011-10-30 22:25:56
【问题描述】:
我有一个使用 MySQL 连接器与 MySQL 数据库通信的程序。该应用程序使用 Visual Studio 2008 运行良好。我正在尝试使用 Visual Studio 2010 构建该应用程序,这就是问题开始的地方。
VS 2010 不支持 MySQL 连接器 1.05,并且它们没有适用于 VS 2010 的 1.1.0 二进制版本。MySQL 信息说要下载连接器 C++ 1.10 的源代码并使用 VS 2010 构建. 经过大量的工作,我建立了它。示例运行。
但是,当我使用新构建的连接器 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 连接器 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 找不到 connect.cpp 使用的 get_driver_instance() 的声明或函数声明。我的程序中的语句与connect.cpp 使用的语句完全相同,因为我将其复制过来而没有任何更改。
其他人已通过使用其他驱动程序解决了此问题。但是,除非必须,否则我不想更改适用于 VS2008 的代码。
对此问题的另一个回复说要定义“mysqlcppconn_EXPORTS”,但这也不起作用,也在回复的评论中报告。
这是我的问题:
1. 有没有人用 MySQL Connector 1.1.0 和 Visual Studio 2010 一起工作?
如果有,请回复分步示例并注明是dll还是静态库。
2.VS编译器如何选择返回MySQL_Driver *的get_driver_instance()函数而不是返回Driver *的函数?
我什至没有收到关于模棱两可的函数的任何警告或错误(因为重载的区别不仅仅在于返回类型)。
我在 Windows-7x64 位、MySQL 连接器 C++ 1.1.0 上使用 Visual Studio 2010。
另请参阅:
get_driver_instance() crashes with Qt
undefined reference to 'get_driver_instance'
MySQL C++ Connector: undefined reference to `get_driver_instance'
mysql-connector-c++ - ‘get_driver_instance’ is not a member of ‘sql::mysql’
How to fix unresolved external symbol due to MySql Connector C++?
【问题讨论】:
标签: c++ mysql visual-studio-2010 windows-7-x64 mysql-connector