MinGW で構築した静的ライブラリがあり、Qt アプリケーションからそのライブラリにリンクしようとしています。ライブラリ内のオブジェクト ファイルの 1 つが原因でリンカー エラーが発生し続けます。このファイルは、実際には 2 つの Boost ヘッダーを宣言しています。1 つは shared_ptr を使用するためのもので、もう 1 つはクラスをコピー不可にするためのものです。このブースト機能の使用が問題の原因であると考えていますが、その理由はわかりません。ファイルで定義されたクラスを使用する Qt アプリのクラスをコメントアウトすると、Qt アプリは正常にリンクします。これは、出力のエラー部分です。
C:\blah\build\windows\mingw\libfoo.a(foo_ctis.cpp.obj):foo_ctis.cpp:(.text+0x10a): `__gxx_personality_sj0' への未定義の参照
C:\blah\build\windows\mingw\libfoo.a(foo_ctis.cpp.obj):foo_ctis.cpp:(.text+0x12f): `_Unwind_SjLj_Register' への未定義の参照
C:\blah\build\windows\mingw\libfoo.a(foo_ctis.cpp.obj):foo_ctis.cpp:(.text+0x203): `_Unwind_SjLj_Resume' への未定義の参照
C:\blah\build\windows\mingw\libfoo.a(foo_ctis.cpp.obj):foo_ctis.cpp:(.text+0x20e): `_Unwind_SjLj_Unregister' への未定義の参照
C:\blah\build\windows\mingw\libfoo.a(foo_ctis.cpp.obj):foo_ctis.cpp:(.text+0x226): `__gxx_personality_sj0' への未定義の参照
C:\blah\build\windows\mingw\libfoo.a(foo_ctis.cpp.obj):foo_ctis.cpp:(.text+0x24b): `_Unwind_SjLj_Register' への未定義の参照
C:\blah\build\windows\mingw\libfoo.a(foo_ctis.cpp.obj):foo_ctis.cpp:(.text+0x31f): `_Unwind_SjLj_Resume' への未定義の参照
C:\blah\build\windows\mingw\libfoo.a(foo_ctis.cpp.obj):foo_ctis.cpp:(.text+0x32a): `_Unwind_SjLj_Unregister' への未定義の参照
C:\blah\build\windows\mingw\libfoo.a(foo_ctis.cpp.obj):foo_ctis.cpp:(.text$_ZN5boost6detail12shared_countC1IN3foo25foo_SomeClassImplEEEPT_[boost::detail::shared_count::shared_count(foo::foo_SomeClassImpl*)] +0xc): `__gxx_personality_sj0' への未定義の参照
C:\blah\build\windows\mingw\libfoo.a(foo_ctis.cpp.obj):foo_ctis.cpp:(.text$_ZN5boost6detail12shared_countC1IN3foo25foo_SomeClassImplEEEPT_[boost::detail::shared_count::shared_count(foo::foo_SomeClassImpl*)] +0x31): `_Unwind_SjLj_Register' への未定義の参照
C:\blah\build\windows\mingw\libfoo.a(foo_ctis.cpp.obj):foo_ctis.cpp:(.text$_ZN5boost6detail12shared_countC1IN3foo25foo_SomeClassImplEEEPT_[boost::detail::shared_count::shared_count(foo::foo_SomeClassImpl*)] +0xfb): `_Unwind_SjLj_Resume' への未定義の参照
C:\blah\build\windows\mingw\libfoo.a(foo_ctis.cpp.obj):foo_ctis.cpp:(.text$_ZN5boost6detail12shared_countC1IN3foo25foo_SomeClassImplEEEPT_[boost::detail::shared_count::shared_count(foo::foo_SomeClassImpl*)] +0x106): `_Unwind_SjLj_Unregister' collect2 への未定義の参照: ld は 1 つの終了ステータスを返しました
言及すべきもう 1 つのことは、このクラスの実装へのポインターを使用していることです。どんな助けでも大歓迎です。
解決済み: MinGW が GCC バージョンを提供する前に、古いバージョンの GCC がパスに含まれていることがわかりました。古いバージョンは、しばらく前に持っていた GNUStep パッケージに含まれていました。これらの異なるバージョンの構成が問題を引き起こしていると思います。問題を解決するために正しい軌道に乗っていた kemiisto に感謝します。