Проблемы в MinGW при статической компоновке библиотек SFML - PullRequest
3 голосов
/ 13 марта 2011

У меня есть программа, которая компилируется без ошибок в Linux, но когда я компилирую ее для Windows, используя MinGW, она не может работать, так как говорит, что рядом с ней нужны некоторые DLL.Поэтому я решил статически связать его, но он выдает некоторые ошибки:

/usr/i586-mingw32msvc/lib/libsfml-window-s.a(WindowImplWin32.o):WindowImplWin32.cpp:(.text+0x146e): undefined reference to `__Unwind_Resume'
/usr/i586-mingw32msvc/lib/libsfml-window-s.a(WindowImplWin32.o):WindowImplWin32.cpp:(.text+0x17d0): more undefined references to `__Unwind_Resume' follow
/usr/i586-mingw32msvc/lib/libsfml-window-s.a(WindowImplWin32.o):WindowImplWin32.cpp:(.eh_frame+0x12): undefined reference to `___gxx_personality_v0'
/usr/i586-mingw32msvc/lib/libsfml-window-s.a(Joystick.o):Joystick.cpp:(.eh_frame+0x11): undefined reference to `___gxx_personality_v0'
collect2: ld returned 1 exit status

Кажется, что он имеет некоторые внешние зависимости.Что это такое и как их связать?

Редактировать:

Вот что я вставил в командную строку:

i586-mingw32msvc-g ++ "./main.cpp" -o "./win32.exe" / usr / i586-mingw32msvc / lib / libsfml-graphics-sa / usr / i586-mingw32msvc / lib / libsfml-window-sa / usr/i586-mingw32msvc/lib/libm.a /usr/i586-mingw32msvc/lib/libmsvcr90.a

Помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 14 марта 2011

У меня была эта проблема слишком недавно.

Дело в том, что SFML скомпилирован с обработкой исключений DW2, но стандартный кросс-компилятор MinGW (в репозиториях Debain и Ubuntu) использует SJLJ, и они несовместимы сдруг с другом.Мне пришлось создать свой собственный кросс-компилятор с обработкой исключений DW2, и это работает безупречно.В качестве альтернативы, вы можете создать сам SFML с помощью существующего компилятора SJLJ, поэтому SFML будет также и SJLJ.

Я решил создать компилятор DW2, потому что это более современный метод, и это тоже было хорошее упражнение.

0 голосов
/ 13 марта 2011

Убедитесь, что вы используете g ++ вместо gcc, должно это исправить.Начните с нуля (очистите все перед восстановлением).Другим вариантом может быть то, что описано в здесь , при условии, что вы уже используете g ++ и по-прежнему получаете его.

...