LINUX.ORG.RU

cross-compiling with SDL in linux to windows


0

1

Всем привет!
В программе используется OpenGL и SDL.
Под Linux отлично собирается.
Не удаётся скомпилировать exe для windows.
Компилирую под ubuntu 11.10.
Пока стараюсь собрать без OpenGl.

SOURCE = main.cpp

NIX_CC32 = gcc -O3 -m32 -s
NIX_CC64 = gcc -O3 -m64 -s
WIN_CC32 = i686-w64-mingw32-gcc   -mwindows -m32 -O3 -s
WIN_CC64 = x86_64-w64-mingw32-gcc -mwindows -m64 -O3 -s

NIX_BF32 = nix-32.app
NIX_BF64 = nix-64.app
WIN_BF32 = win-32.exe
WIN_BF64 = win-64.exe

NIX_CI32 = -I/usr/include
NIX_CI64 = -I/usr/include
WIN_CI32 = -I/usr/i686-w64-mingw32/include
WIN_CI64 = -I/usr/x86_64-w64-mingw32/include

NIX_CL32 = -L/usr/lib32 -lSDL-1.2
NIX_CL64 = -L/usr/lib   -lSDL
WIN_CL32 = -L/usr/i586-mingw32msvc/lib  -lmingw32 -luser32 -lgdi32 -lwinmm -ldxguid -lSDL
WIN_CL64 = -L/usr/amd64-mingw32msvc/lib -lmingw32 -luser32 -lgdi32 -lwinmm -ldxguid -lSDL

all:
	$(NIX_CC32) -o $(NIX_BF32) $(SOURCE) $(NIX_CI32) $(NIX_CL32)
	$(NIX_CC64) -o $(NIX_BF64) $(SOURCE) $(NIX_CI64) $(NIX_CL64)
	$(WIN_CC32) -o $(WIN_BF32) $(SOURCE) $(WIN_CI32) $(WIN_CL32)
	$(WIN_CC64) -o $(WIN_BF64) $(SOURCE) $(WIN_CI64) $(WIN_CL64)
	rm -f ./*.o
.......@.......:/........................../dev$ make
gcc -O3 -m32 -s -o nix-32.app main.cpp -I/usr/include -L/usr/lib32 -lSDL-1.2
gcc -O3 -m64 -s -o nix-64.app main.cpp -I/usr/include -L/usr/lib   -lSDL
i686-w64-mingw32-gcc   -mwindows -m32 -O3 -s -o win-32.exe main.cpp -I/usr/i686-w64-mingw32/include -L/usr/i586-mingw32msvc/lib  -lmingw32 -luser32 -lgdi32 -lwinmm -ldxguid -lSDL
/usr/bin/i686-w64-mingw32-ld: cannot find -lSDL
collect2: выполнение ld завершилось с кодом возврата 1
make: *** [all] Ошибка 1

-I/usr/i686-w64-mingw32/include -L/usr/i586-mingw32msvc/lib

Это как? Заголовки от mingw-w64, а библиотеки от mingw32? Надо собирать чем-то одним.

/usr/bin/i686-w64-mingw32-ld: cannot find -lSDL

Виндовую libSDL.a сначало надо собрать и подсунуть кросс-компилятору.

Deleted ()
Ответ на: комментарий от Deleted

Это как? Заголовки от mingw-w64, а библиотеки от mingw32? Надо собирать чем-то одним.

Спасибо, как-раз из-за того что перепутал папки:
-L/usr/i586-mingw32msvc/lib, -L/usr/amd64-mingw32msvc/lib
-L/usr/i686-w64-mingw32, -L/usr/x86_64-w64-mingw32/lib
Он выдавал кучу ошибок, когда я подсовывал ему
libSDL.dll.a, libSDLmain.a из пакета
http://www.libsdl.org > Download > SDL 1.2 > Runtime Libraries > SDL-1.2.14-win32.zip
( http://www.libsdl.org/release/SDL-1.2.14-win32.zip )

Теперь всё собирает для win32
Правильно, или нет, пока не знаю

Но x86_64-w64-mingw32-gcc не хочет брать библиотеки, которые для win32
Постараюсь найти или собрать...

SOURCE = main.cpp

NIX_CC32 = gcc -m32 -O3 -s
NIX_CC64 = gcc -m64 -O3 -s
WIN_CC32 = i686-w64-mingw32-gcc   -mwindows -m32 -O3 -s
WIN_CC64 = x86_64-w64-mingw32-gcc -mwindows -m64 -O3 -s

NIX_BF32 = nix-32.app
NIX_BF64 = nix-64.app
WIN_BF32 = win-32.exe
WIN_BF64 = win-64.exe

NIX_CI32 = -I/usr/include
NIX_CI64 = -I/usr/include
WIN_CI32 = -I/usr/i686-w64-mingw32/include
WIN_CI64 = -I/usr/x86_64-w64-mingw32/include

NIX_CL32 = -L/usr/lib32 -lSDL-1.2
NIX_CL64 = -L/usr/lib   -lSDL
WIN_CL32 = -L/usr/i686-w64-mingw32/lib   -lmingw32 -luser32 -lgdi32 -lwinmm -ldxguid -lSDLmain -lSDL
WIN_CL64 = -L/usr/x86_64-w64-mingw32/lib -lmingw32 -luser32 -lgdi32 -lwinmm -ldxguid -lSDLmain -lSDL

all:
	$(NIX_CC32) -o $(NIX_BF32) $(SOURCE) $(NIX_CI32) $(NIX_CL32)
	$(NIX_CC64) -o $(NIX_BF64) $(SOURCE) $(NIX_CI64) $(NIX_CL64)
	$(WIN_CC32) -o $(WIN_BF32) $(SOURCE) $(WIN_CI32) $(WIN_CL32)
	$(WIN_CC64) -o $(WIN_BF64) $(SOURCE) $(WIN_CI64) $(WIN_CL64)
	rm -f ./*.o
...
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libSDLmain.a when searching for -lSDLmain
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libSDL.dll.a when searching for -lSDL
...

zheland ()
Ответ на: комментарий от zheland

Вряд ли найду...
Вряд ли соберу...
1) Меня смущает расширение .a ( libSDL.dll.a ) ...
libSDL подключается динамически или статически?
Нужно динамически, не вшивая в код...
2) Вообще реально собрать библиотеки SDL для win64?
И как это сделать под линуксом?

zheland ()
Ответ на: комментарий от zheland

Но x86_64-w64-mingw32-gcc не хочет брать библиотеки, которые для win32 Постараюсь найти или собрать...

Вполне ожидаемо, что 64-битный компилятор не берет 32-битные библиотеки. Нужно собирать самому.

Deleted ()
Ответ на: комментарий от zheland

1) Меня смущает расширение .a ( libSDL.dll.a ) ... libSDL подключается динамически или статически? Нужно динамически, не вшивая в код...

По умолчанию подключается динамически (к libSDL.dll.a).

Вообще реально собрать библиотеки SDL для win64? И как это сделать под линуксом?

Если в SDL заявлена поддержка Win64, то почему бы и нет? Нужно посмотреть сценарий сборки, найти способ указать нужный кросс-компилятор (x86_64-w64-mingw32-gcc), может конфиг подправить, если он там есть.

Но нужен вам этот геморрой? 32-битной версии не хватит? Под виндой нативные 64-битные программы пока что экзотика.

Deleted ()
Ответ на: комментарий от Deleted

Всем большое спасибо!

С сайта https://build.opensuse.org/package/show?package=mingw64-SDL&project=windo...
Из архива http://download.opensuse.org/repositories/windows:/mingw:/win64/SLE_11/noarch...
Вынул файлы библиотек и перекинул нужное прямо в /usr/x86_64-w64-mingw32/lib
Все собралось. Правильно или нет, проверить не могу, 64-битного windows нет...

Ещё раз большое спасибо!

zheland ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.