我有一个程序,使用 MySQL 连接器与 MySQL 数据库进行通信。该应用程序使用 Visual Studio 2008 运行良好。我试图使用 Visual Studio 2010 构建该应用程序,这就是问题开始的地方。
VS 2010 不支持 MySQL Connector 1.05,并且没有可与 VS 2010 配合使用的 1.1.0 二进制版本。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 *
?
我什至没有收到任何有关不明确函数的警告或错误(因为重载必须不仅仅只是返回类型不同)。
我在 Windows 7x64 位、MySQL Connector C++ 1.1.0 上使用 Visual Studio 2010。
也可以看看:
get_driver_instance() 在 Qt 中崩溃
对“get_driver_instance”的未定义引用
MySQL C++ 连接器:对“get_driver_instance”的未定义引用
mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员
如何修复由于 MySql Connector C++ 导致的无法解析的外部符号?