我有一个使用MySQL连接器与MySQL数据库对话的程序。该应用程序使用Visual 2008运行良好。我正在尝试用Visual 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 2010和连接器项目示例时,VS 2010找不到connect.cpp使用的connect.cpp的声明或函数声明。我的程序中的语句是connect.cpp使用的确切语句,因为我没有做任何更改就复制了它。
其他人通过使用另一个驱动程序解决了这个问题。但是,除非有必要,否则我不想更改使用VS2008的代码。
对这个问题的另一个答复是定义"mysqlcppconn_EXPORTS",但这也不起作用,在回复的评论中也有报道。
以下是我的问题:
如果是的话,请一步一步地回复,并指出dll或静态dll是VS编译器选择返回MySQL_Driver *的get_driver_instance()函数,而不是返回Driver *的函数吗?
我甚至没有收到任何关于模糊函数的警告或错误(因为重载的区别不只是返回类型)。
我在Windows7x64位上使用Visual 2010,MySQL连接器C++ 1.1.0。
还请参见:
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++?
发布于 2011-10-20 15:51:47
一些函数名已经更改。我最好的解决方案是使用预处理条件来区分它们。
发布于 2011-10-17 22:31:07
我也有同样的问题,我一直在想:
*sampletest.obj : error LNK2001: unresolved external symbol __imp__get_driver_instance*虽然我尝试了32位连接器并解决了这个问题(如果幸运的话,它可能对您有用),但是我使用的是64位mysql,windows 7,因此出现了一些兼容性问题。我仍在寻找解决上述问题的办法。
按照教程逐字逐句地链接所有库,我认为C++ 1.10连接器可能有一些问题。
https://stackoverflow.com/questions/7127284
复制相似问题