我有一个用 MinGW 构建的静态库,我正在尝试从 Qt 应用程序链接到该库。我不断收到由库中的一个目标文件引起的链接器错误。这个文件实际上声明了几个 Boost 头文件,一个用于 shared_ptr,另一个用于使类不可复制。我相信使用这个增强功能是导致问题的原因,但我不知道为什么。如果我注释掉 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 退出状态
另一件要提到的事情是我在这个类中使用了一个指向实现的指针。任何帮助将非常感激。
已解决:我发现在我的 MinGW 提供 GCC 版本之前,我的路径中有一个旧版本的 GCC。旧版本包含在我不久前的一个 GNUStep 包中。我认为这些不同版本的配置导致了问题。感谢 kemiisto,他在解决问题方面走在了正确的轨道上。