質問

C ++静的リンケージの基本的な説明が必要です。 data_client.libというファイルがあります。ライブラリファイルa.exe、b.exe、c.exeには3つの独立したコンシューマがあります。 data_client.libがインターフェイスであるdata_server.exeというサービスがあります。実際、data_server.exeに別の関数を追加し、data_client.libに対応するインターフェイスを追加しました。 a.exeだけに追加の機能が必要なので、a.exeのみをビルドします。 data_server.exe、data_client.exe、a.exeをパッチとして出荷しました。現在、b.exeとc.exeはランダムに/一貫性なくスローをクラッシュします

  

mfc42u!CException :: `RTTI完了   Object Locator '+ 0x10

それは理にかなっていますか? b.exeとc.exeもビルドすると、クラッシュは発生しません。これが動作する方法ですか?

役に立ちましたか?

解決

  

実際、data_server.exeに別の関数を追加し、data_client.libに対応するインターフェイスを追加しました。

これからあなたのライブラリに何が追加されたのか正確にはわかりません。ただし、(いくつかの新しいスタンドアロン関数ではなく)クラスに追加された新しいメソッドの場合、すべてを再コンパイルすると問題が解決される可能性が非常に高くなります。 vtable は、変更によって破棄された場合とされなかった場合があります。

また、クラッシュがこれとはまったく関係がなく、他の問題が続いている可能性もあります...しかし、あなたの説明から、私のお金はvtableの問題です。私なら、b.exeとc.exeを再コンパイルし、他の問題を調査する前にもう一度テストします。

他のヒント

おそらく明示的な依存関係はありませんが、一部のプロジェクトヘッダーはライブラリに情報を暗黙的に使用するか、使用します。

エラーについては知りませんが、アプリケーションb.exeおよびc.exeは、古いバージョンのバインディングライブラリを使用して、新しいバージョンのdata_server.exeと通信します。関数を追加した場合、一部のv_tableインデックスはオフになっている場合があります。間違いなくすべてのライブラリを再構築する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top