Статически связывание SDL2 на Linux и MacOS «как на Windows»Linux

Ответить
Anonymous
 Статически связывание SDL2 на Linux и MacOS «как на Windows»

Сообщение Anonymous »

Я сделал игру на C, используя библиотеки SDL2, SDL2_IMAGE, SDL2_MIXER и SDL2_TTF, установленных на Linux (Ubuntu) с помощью sudo apt-get установить libsdl2-dev (например), и я хотел улучшить его, так что он будет компилирован на Linex, Macos и Windows> с Mingww). библиотеки.
Я загрузил код Sourse 'Bibraries' из SDL GitHub (например, SDL2) и собрал их на Ubuntu и MacOS с использованием ../configure -prefix =/some/path; делать; Сделайте Install в папке «Build», которую я создал в папке с исходным кодом после разбивания загруженного архива. Что касается Windows, я загрузил SDL2-DEVEVE-2.32.0-Mingw.zip (как для SDL2) из ​​одного и того же источника и просто извлекла папку I686-W64-MingW32 ». MacOS) в репозитории GitHub моей игры переименован в них как «SDL2», «SDL2_IMAGE» и т. Д. Соответственно, а в конце удалили те папки, где я составлял библиотеки. < /p>
Таким образом />[*]inc/header.h
[*] resources
  • Frameworks

    linux

    sdl2

    bin /sdl-config < /li>
    bin /sdl-config />include/sdl2/.h files < /li>
    lib

    cmake /sdl2

    sdl2-config.cmake
  • sdl2-config.cmake
    > sdl2-config.cmake
    />
[*]pkgconfig/sdl2.pc
[*]libsdl2.a libsdl2.la
[*] libsdl2_test.a libsdl2_test.la
[*]libsdl2-2.0.so.0.3200.0
[*]libsdl2main.a libsdl2main.la


[*]share/aclocal/sdl2.m44>

share/aclocal/sdl2.m.mry>

/>
[*] sdl2_image Эти три имеют
[*] sdl2_mixer "включить" и "lib" папки
[*] sdl2_ttf (то же самое, что и в папке sdl2 ")

[*] macos та же структура с папкой "linux" (но вместо этого файлы. Изображения, музыка и т. Д.


[*] src/.c files
[*] Makefile
[*].dll файлы для Windows




executable:=mygame

inc_dir:=inc
src_dir:=src
obj_dir:=obj
lib_dir:=resources/frameworks/

src_files:=$(wildcard $(src_dir)/*.c)
obj_files:=$(src_files:$(src_dir)/%.c=$(obj_dir)/%.o)

compiler:=gcc
cc_flags:=-std=c11 -Wall -Wextra -Werror -Wpedantic
inc_flags=-I$(inc_dir) \
-I$(lib_dir)/SDL2/include/SDL2 \
-I$(lib_dir)/SDL2_image/include/SDL2 \
-I$(lib_dir)/SDL2_mixer/include/SDL2 \
-I$(lib_dir)/SDL2_ttf/include/SDL2
lib_flags=-L$(lib_dir)/SDL2/lib -lSDL2main -lSDL2 \
-L$(lib_dir)/SDL2_image/lib -lSDL2_image \
-L$(lib_dir)/SDL2_mixer/lib -lSDL2_mixer \
-L$(lib_dir)/SDL2_ttf/lib -lSDL2_ttf

newdir:=mkdir
removedir:=rm
removefile:=rm

ifeq ($(OS),Windows_NT)
lib_dir:=$(lib_dir)windows
lib_flags:=$(lib_flags) -lmingw32 -mwindows
removedir:=rmdir /s /q
removefile:=del
else
newdir:=mkdir -p
removedir:=rm -rf
removefile:=rm -f
ifeq ($(shell uname),Darwin)
lib_dir:=$(lib_dir)macos
else
lib_dir:=$(lib_dir)linux
endif
endif

all: $(executable)

$(executable): $(obj_files)
$(compiler) $(cc_flags) $^ -o $@ $(inc_flags) $(lib_flags)

$(obj_dir)/%.o: $(src_dir)/%.c | $(obj_dir)
$(compiler) $(cc_flags) -c $< -o $@ $(inc_flags)

$(obj_dir):
$(newdir) $(obj_dir)

clean:
$(removedir) $(obj_dir)

uninstall: clean
$(removefile) $(executable)

reinstall: uninstall all

.PHONY: all clean uninstall reinstall
< /code>
Он отлично работает на Windows, но на Linux и MacOS, когда дело доходит до компиляции исполняемого файла, такие ошибки возникают: < /p>

На Linux: < /li>
< /ul>

< /li>
< /ul>

/usr/bin/ld: resources/frameworks/linux/SDL2/lib/libSDL2.a(SDL_stdlib.o): In function «SDL_fmod_REAL»:
/path/to/directory/where/i/compiled/library/(that_does_not_exist_now)/src/stdlib/SDL_stdlib.c:279:(.text+0x35d): undefined reference to `fmod'
...
collect2: error: ld returned 1 exit status
make: *** [Makefile:46: mygame] Error 1
< /code>

На macos: < /li>
< /ul>
Undefined symbols for architecture x86_64:
"_CFArrayAppendValue", referenced from:
_GetDisplayMode in libSDL2.a(SDL_cocoamodes.o)
...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mygame] Error 1
< /code>
Есть много ошибок на каждой из этой ОС, они просто имеют одинаковый синтаксис, поэтому я дал только один из них для каждой ОС, например. Также проблемы не только с SDL2, но и с другими библиотеками. Может ли это быть возможно? /> Может быть, мне нужно компилировать библиотеки с некоторыми дополнительными флагами или загрузки библиотек зависимостей, такими как Freetype2 для SDL2_TTF или просто каким -то образом улучшить мой makefile? < /p>
Заранее! VirtualBox.
(также извините, если у меня есть некоторые ошибки на моем английском, это не мой родной язык)

Подробнее здесь: https://stackoverflow.com/questions/794 ... on-windows
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»