【问题标题】:Unresolved symbol: sql::mysql::get_driver_instance(void)未解析符号:sql::mysql::get_driver_instance(void)
【发布时间】: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


    【解决方案1】:

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

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

    虽然我尝试了 32 位连接器并解决了问题(您可能想尝试一下,如果幸运的话它可能对您有用),但我使用的是 64 位 mysql,windows 7,所以有一个有点兼容性问题..我仍在寻找上述问题的解决方案。

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

    【讨论】:

    • 我终于在 OS / Compiler 版本之间使用了“#ifdef”语句。 MySQL 连接器的函数名称已更改。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 2017-03-27
      • 2010-12-15
      • 2015-02-17
      • 1970-01-01
      相关资源
      最近更新 更多