Qt フレームワークQTextCodecを静的ライブラリに実装しています。コーデックの実装がQTextCodec::codecForMib(int)およびに登録されるようにするQTextCodec::codecForName(const char *)には、いくつかのことが必要です。
- コーデックのインスタンスを初期化する必要があります (ただし、必ずしも使用する必要はありません)。
- インスタンスを削除したり、範囲外にしたりしてはなりません。
これはQTextCodec::QTextCodec()、インスタンスが既知のコーデックの辞書に登録されているためと思われます。わかった。そのため、アプリケーション (静的ライブラリにリンクされている) にグローバル変数を追加すると、単体テストは成功します。
ただし、静的ライブラリにグローバル インスタンスを配置したいので、それに対してリンクするアプリは自分で面倒をみる必要はありません。しかし、アプリケーションがそれを参照せずに、クラスインスタンスを静的ライブラリで初期化する方法を理解できません。
アプリケーションで参照しない限り、クラスのインスタンスを実際に初期化するQMyTextCodec xことも初期化することもありません。QMyTextCodec *x = new QMyTextCodecx