Segfault в классе создания после кросс-компиляции для Windows

Я пытаюсь создать проргам, используя SFML 2.0 для Windows, используя Gentoo Linux с mingw32.

Я не хочу перекомпилировать SFML и все его зависимости, поэтому я скачал скомпилированную версию с официальный сайт (версия 32 бита — SJLJ)

Я скомпилировал свой код и выполнил его на Wine, но он не работает, когда я пытаюсь создать экземпляр класса из SFML.
Я пытался использовать статическую или динамическую версию SFML, ничего не изменилось.

При использовании режима отладки кажется, что this значение неправильно инициализировано в классах SFML.

флаги моей компиляции:

CXXFLAGS = -W -Wall -ggdb3 -ISFML-2.0-rc/include -DSFML_STATIC
LDFLAGS  = -LSFML-2.0-rc/lib -static-libgcc -static-libstdc++ -mwindows      \
-lsfml-window-s-d -lsfml-graphics-s-d -lsfml-system-s-d -lws2_32

main.cpp:

#include <SFML/Window.hpp>

int main() {
sf::VideoMode vm(800, 600);

return 0;
}

винная ошибка:

wine: Unhandled page fault on write access to 0x00000320 at address 0x4021e9 (thread 0026), starting debugger...
Unhandled exception: page fault on write access to 0x00000320 in 32-bit code (0x004021e9).
Register dump:
CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b
EIP:004021e9 ESP:0087fd78 EBP:0087fd78 EFLAGS:00010202(  R- --  I   - - - )
EAX:00000320 EBX:7b896ff4 ECX:0087fdd4 EDX:00000258
ESI:7ffdf000 EDI:004012b0
Stack dump:
0x0087fd78:  0087fdf8 004013bd 00000320 00000258
0x0087fd88:  00000020 0040c387 00401340 004012b0
0x0087fd98:  0087fdc8 00000000 00000001 7ffdf000
0x0087fda8:  0087fdc8 7ed71ff4 00409fc0 00418d28
0x0087fdb8:  00419370 0087fde0 004013ca 0087fd80
0x0087fdc8:  0087fde8 0040b162 00000001 0000ffff
Backtrace:
=>0 0x004021e9 VideoMode+0x9(this=0x320, modeWidth=0x258, modeHeight=0x20, modeBitsPerPixel=0x40c387) [D:\developpement\sfml-misc\release\2.0-rc1\gcc4-sjlj\debug-static\src\SFML\Window/D:/developpement/sfml-master/src/SFML/Window/VideoMode.cpp:50] in chess (0x0087fd78)
1 0x004013bd main+0x6c() [/home/bak/projets/bjtu/server architecture/Chess/main.cpp:5] in chess (0x0087fdf8)
2 0x004010fd in chess (+0x10fc) (0x0087fe88)
3 0x7b85d80f in kernel32 (+0x4d80e) (0x0087fec8)
4 0x7bc73ed0 call_thread_func_wrapper+0xb() in ntdll (0x0087fed8)
5 0x7bc7690d call_thread_func+0x7c() in ntdll (0x0087ffa8)
6 0x7bc73eae RtlRaiseException+0x21() in ntdll (0x0087ffc8)
7 0x7bc4c78e call_dll_entry_point+0x61d() in ntdll (0x0087ffe8)
8 0xf767106d wine_call_on_stack+0x1c() in libwine.so.1 (0x00000000)
9 0xf767112b wine_switch_to_stack+0x2a() in libwine.so.1 (0xffd55c28)
10 0x7bc51e6f LdrInitializeThunk+0x2ee() in ntdll (0xffd55c98)
11 0x7b86371a __wine_kernel_init+0xa19() in kernel32 (0xffd56e38)
12 0x7bc5269b __wine_process_init+0x25a() in ntdll (0xffd56eb8)
13 0xf766e5e2 wine_init+0x291() in libwine.so.1 (0xffd56f28)
14 0x7bf0106b main+0x7a() in <wine-loader> (0xffd57378)
15 0xf74b6596 __libc_start_main+0xe5() in libc.so.6 (0xffd573f8)
0x004021e9 VideoMode+0x9 [D:\developpement\sfml-misc\release\2.0-rc1\gcc4-sjlj\debug-static\src\SFML\Window/D:/developpement/sfml-master/src/SFML/Window/VideoMode.cpp:50] in chess: movl   %edx,0x0(%eax)

VideoMode.cpp:50 обратитесь к концу contructor, как с другими классами SFML, которые я пытался использовать.

this переменная неправильно инициализирована:

 =>0 0x004021e9 VideoMode+0x9(this=0x320, modeWidth=0x258, ...

this принять значение первого параметра, а все остальные значения сдвинуты (fisrt arg имеет второе значение, …)

Я протестировал несколько классов с тем же результатом.

С чем может быть проблема?
Я думал, что разница между соглашениями о вызовах, но я не уверен.

0

Решение

Похоже, что вы запускаете VideoMode для SFML неправильным способом, вместо этого попробуйте создать объект Window с VideoMode в качестве первого параметра, как в следующем примере:

sf::Window App(sf::VideoMode(800, 600, 32), "SFML Window");

Я думаю, что отсюда должны быть полезны турориалы, но это может объяснить, почему просто выделение VideoMode из raw вызывает segfault.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector