2011-08-19 132 views
3

我有一个使用MySQL连接器与MySQL数据库交谈的程序。该应用程序使用Visual Studio 2008正常运行。我试图让应用程序与Visual Studio 2010一起构建,这就是问题出现的地方。未解决的符号:sql :: mysql :: get_driver_instance(void)

VS 2010不支持MySQL Connector 1.05,它们没有与VS 2010一起使用的1.1.0的二进制版本。MySQL信息说要下载Connector C++ 1.10的源代码并使用VS经过很多工作,我建立了它。示例运行。

然而,当我建立我的应用程序与新建成的连接器C++ 1.1.0,我得到了以下错误消息:

error LNK2019: unresolved external symbol "class sql::mysql::MySQL_Driver * __cdecl sql::mysql::get_driver_instance(void)" ([email protected]@[email protected]@[email protected]@XZ) referenced in function "private: void __thiscall Database_NS::Manager::initialize_db_driver(void)const " ([email protected]@[email protected]@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连接,但仍然存在错误信息。

有趣的一点是,根据2010 VS,上述源极线使用此声明:

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 *的函数?
我甚至没有得到任何有关模糊函数的警告或错误(因为重载必须不仅仅是返回类型)。

我在Windows-7x64位,MySQL Connector 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++?

回答

1

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

0

我也有同样的问题,我不断收到:

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

尽管我尝试了一个32位连接器,问题已解决(您可能想尝试一下,如果幸运的话,它可能适用于您),但我使用的是64位MySQL,Windows 7,所以有一点兼容性问题..我仍然在寻找解决上述问题的方法。

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

+1

我终于在OS/Compiler版本之间使用了“#ifdef”语句。 MySQL连接器更改了函数名称。 –