Неопределенные ссылки при попытке связать спокойное приложение с моей статической библиотекой

У меня есть статическая библиотека, которую я создал с MinGW, я пытаюсь связаться с той библиотекой из спокойного приложения. Я продолжаю получать ошибки компоновщика, вызванные одним из объектных файлов в библиотеке. Этот файл на самом деле объявляет несколько заголовков Повышения, один для использования shared_ptr и другого, таким образом, я могу сделать класс noncopyable. Я полагаю, что использование этой функциональности повышения - то, что вызывает проблему, но я понятия не имею почему. Если я комментирую классы в спокойном приложении, которые используют класс, определенный в файле, спокойные прекрасные ссылки приложения. Это - ошибочная часть вывода:

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 статус выхода

Еще одна вещь упомянуть состоит в том, что я использую указатель на реализацию в этом классе. Любая справка очень ценилась бы.

Решенный: Я выяснил, что у меня была более старая версия GCC в моем пути, который был beng, включенным, прежде чем мой MinGW предоставил версию GCC. Старая версия была включена в пакет GNUStep, от которого я имел некоторое время назад. Я думаю, что конфигурация этих различных версий вызывала проблемы. Благодаря kemiisto, кто был на правильном пути в решении проблемы.

6
задан clintsmith 9 February 2010 в 02:44
поделиться

1 ответ

Кажется, что ваша статическая библиотека была скомпонована с одним дистрибутивом MinGW (т.е. 3-ей версией), но вы пытаетесь скомпоновать ваше приложение с этой библиотекой, используя другой дистрибутив MinGW (т.е. 4-ю версию, которая распространяется с бинарным Qt). Вы должны пересобрать вашу библиотеку, используя тот же MinGW, который вы используете для разработки вашего приложения.

Обновление

Может быть это еще одна хорошо известная проблема. Взгляните на эту тему. Возможно у вас также есть 2 различные папки с Qt libs

C:\Qt\2009.05\bin;C:\Qt\2009.05\qt\bin 

в вашем пути. Библиотеки в первой папке (...\bin) скомпилированы с VS2008, а библиотеки во второй (...\qt\bin) скомпилированы с MinGW. Элементы в переменной path просматриваются при запуске приложения. Внезапно появляется папка с "неправильными" библиотеками перед папкой с правильным элементом в переменной пути. Что вы можете сделать, так это скопировать QtCore4.dll, QtGui4.dll и другие библиотеки, которые вам нужно скопировать в папку с исполняемым файлом вашего приложения. Надеюсь, это поможет.

Некоторые ссылки на эту проблему:

3
ответ дан 17 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: