4

コードを MySQL Connector C++ 1.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)

mysqlconn dumpbin-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)

この 2 行を並べると、違いは次のようになります。

(?get_driver_instance@mysql@sql@@YAPEAVMySQL_Driver@12@XZ)  
(?get_driver_instance@mysql@sql@@YAPAVMySQL_Driver@12@XZ)  

YAPEAVANDの名前管理の違いは何YAPAVですか?

私の問題は、MySQL コネクタ ライブラリとコードのビルド方法との間の非互換性に関連していると考えられます。

ウェブを検索したところ、MySQL Connector 1.1.0 に対するバグが見つかりましたが、「バグではない」に変更されました。

64 ビット プラットフォームを使用して 32 ビット ターゲットにコンパイルする Visual Studio 2010 を使用しています。
MySQL コネクタ C++ はバージョン 1.1.0 です。

4

1 に答える 1

3

MSVC ツールundnameはあなたの友達です。それを使用すると、次のことがわかります。

  • ?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 ビット ターゲット用にビルドされたライブラリにリンクしています。

于 2012-11-28T18:09:49.210 に答える