database.lib(db_mana-6ren">
gpt4 book ai didi

c++ - Visual Studio Name Mangling "YAPEAV"和 Mysql 连接器

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:06 25 4
gpt4 key购买 nike

将我的代码与 MySQL Connector C++ 1.1.0 链接时出现 Unresolved external symbol 错误。
这是错误消息:

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)

我使用 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)

YAPEAVYAPAV 之间的名称管理有什么区别?

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

我在网上搜索并发现了针对 MySQL Connector 1.1.0 的错误,但它被更改为“不是错误”。

我正在使用 Visual Studio 2010 编译到使用 64 位平台的 32 位目标。
MySQL Connector C++ 版本为 1.1.0。

最佳答案

MSVC 工具 undname 是您的好 helper 。使用它,你会发现

  • ?get_driver_instance@mysql@sql@@YAPEAVMySQL_Driver@12@XZ对应于:

    class sql::mysql::MySQL_Driver * __ptr64 __cdecl sql::mysql::get_driver_instance(void)
  • ?get_driver_instance@mysql@sql@@YAPAVMySQL_Driver@12@XZ对应于:

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

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

关于c++ - Visual Studio Name Mangling "YAPEAV"和 Mysql 连接器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13611029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com