未解析的符号:sql::mysql::get_driver_instance(void)

Unresolved symbol: sql::mysql::get_driver_instance(void)

本文关键字:instance driver void get mysql 符号 sql      更新时间:2023-10-16

我有一个使用MySQL连接器与MySQL数据库通信的程序。该应用程序在Visual Studio 2008中运行良好。我试图让应用程序与Visual Studio 2010构建,这就是问题开始的地方。

MySQL连接器1.05不支持VS 2010,他们没有1.1.0的二进制版本可以与VS 2010一起工作。MySQL的信息说要下载Connector 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。自由,mysqlconn。自由,mysqlclient。自由,libmysql。

有趣的是,根据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连接器1.1.0与Visual Studio 2010工作吗?
如果是,请回复一步一步的例子,并指出是dll还是静态库
2. VS编译器如何选择返回MySQL_Driver *get_driver_instance()函数而不是返回Driver *的函数?
我甚至没有得到任何关于模糊函数的警告或错误(因为重载必须不仅仅是返回类型的不同)。

我使用Visual Studio 2010在windows -7x64位,MySQL连接器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连接器c++ ?

部分函数名称已更改。我的最佳解决方案是通过使用预处理器条件来区分它们。

我也有同样的问题,我一直得到:

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

虽然我尝试了32位连接器,问题得到了解决(你可能想尝试一下,如果你幸运的话,它可能适合你),但我使用的是64位mysql,windows 7,所以有一点兼容性问题。我还在寻找解决上述问题的方法。

逐字跟随教程,链接所有库我认为c++ 1.10连接器可能有一些问题。