Visual Studio名称“Mangling”;雅皮耶夫“;和Mysql连接器 当我的代码与MySQL连接器C++ +1.0链接时,我得到了未解决的外部符号错误。 以下是错误消息: 6>database.lib(db_manager.obj) : 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 "class sql::mysql::MySQL_Driver * __cdecl sql::mysql::get_mysql_driver_instance(void)" (?get_mysql_driver_instance@mysql@sql@@YAPAVMySQL_Driver@12@XZ)

Visual Studio名称“Mangling”;雅皮耶夫“;和Mysql连接器 当我的代码与MySQL连接器C++ +1.0链接时,我得到了未解决的外部符号错误。 以下是错误消息: 6>database.lib(db_manager.obj) : 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 "class sql::mysql::MySQL_Driver * __cdecl sql::mysql::get_mysql_driver_instance(void)" (?get_mysql_driver_instance@mysql@sql@@YAPAVMySQL_Driver@12@XZ),c++,visual-studio-2010,mysql-connector,name-mangling,C++,Visual Studio 2010,Mysql Connector,Name Mangling,我使用dumpbin获取mysqlconn-static.lib中的符号列表,并发现一个类似的符号: COMDAT; sym= "class sql::mysql::MySQL_Driver * __cdecl sql::mysql::get_driver_instance(void)" (?get_driver_instance@mysql@sql@@YAPEAVMySQL_Driver@12@XZ) 当这两条线对齐时,差异如下所示: (?get_driver_instance@mysql@

我使用
dumpbin
获取mysqlconn-static.lib中的符号列表,并发现一个类似的符号:

COMDAT; sym= "class sql::mysql::MySQL_Driver * __cdecl sql::mysql::get_driver_instance(void)" (?get_driver_instance@mysql@sql@@YAPEAVMySQL_Driver@12@XZ)
当这两条线对齐时,差异如下所示:

(?get_driver_instance@mysql@sql@@YAPEAVMySQL_Driver@12@XZ)  
(?get_driver_instance@mysql@sql@@YAPAVMySQL_Driver@12@XZ)  
YAPEAV
YAPAV
在名称管理上有什么区别

我认为我的问题与MySQL连接器库和我如何构建代码之间的不兼容有关

我在网上搜索了一下,发现了MySQL连接器1.1.0的一个bug,但它被改为“不是bug”

我正在使用Visual Studio 2010使用64位平台编译到32位目标。

MySQL连接器C++是1.1.0版。

< P> MSVC工具<代码> NoNeX是您的朋友。使用它,你会发现

  • ?获取驱动程序_instance@mysql@sql@@YAPEAVMySQL_Driver@12@XZ
    对应于:

    class sql::mysql::MySQL_Driver * __ptr64 __cdecl sql::mysql::get_driver_instance(void)
    
    class sql::mysql::MySQL_Driver * __cdecl sql::mysql::get_driver_instance(void)
    
  • ?获取驱动程序_instance@mysql@sql@@mysql_Driver@12@XZ
    对应于:

    class sql::mysql::MySQL_Driver * __ptr64 __cdecl sql::mysql::get_driver_instance(void)
    
    class sql::mysql::MySQL_Driver * __cdecl sql::mysql::get_driver_instance(void)
    

区别在于装饰。看起来您正在构建一个32位程序,但却链接到一个为64位目标构建的库。

非常感谢。听起来不错,因为我的开发环境是64位的。现在获取库的32位版本。:-)