LINUX.ORG.RU

Кросскомпиляция mingw , OpenGL, твоя моя непонимать, не опять, а снова

 , , , ,


0

1

Разогнался я домакоси Как кросскомпилировать из Linux для MacOS? ::) ага, вернулся пересобрать под mingw и что-то я не понял как быть

Сборка для linux идет без проблем если что. Сборка статической библиотеки для Windows также идёт без проблем, а вот .dll уже выплёвывает мне ошибки.

dron@gnu:~/egnaroc$ make TARGET=Windows -j24
x86_64-w64-mingw32-gcc  obj/physics.o obj/egnaroc.o obj/ui.o obj/entity.o obj/threader.o obj/event.o obj/asset.o obj/network.o obj/graphics.o obj/engine.o obj/audio.o obj/ui_style.o obj/ui_slider.o obj/ui_container.o obj/nuklear.o obj/ui_toast.o obj/ui_line.o obj/ui_rectangle.o obj/ui_text.o obj/ui_option.o obj/ui_button.o obj/ui_listbox.o obj/ui_dialog.o obj/ui_textbox.o obj/ui_spinner.o obj/ui_browser.o obj/renderable.o obj/texture.o obj/sound.o obj/music.o obj/language.o obj/config.o obj/shader.o obj/animation.o obj/font.o obj/effect.o obj/material.o obj/cmesh.o obj/terrain.o obj/image.o obj/skeleton.o obj/mouse.o obj/dragdrop.o obj/keyboard.o obj/joystick.o obj/instance_object.o obj/landscape.o obj/animated_object.o obj/light.o obj/physics_object.o obj/particles.o obj/camera.o obj/static_object.o obj/list.o obj/dict.o obj/vertex_list.o obj/int_list.o obj/randf.o obj/trigger.o obj/vertex_hashtable.o obj/spline.o obj/renderer.o obj/sky.o obj/SDL_local.o -lmingw32 -lopengl32 -lSDL2main -lSDL2 -mwindows -lSDL2_mixer -lSDL2_net -shared  -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/bin/  -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/lib/  -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/bin/ -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/lib/  -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/bin/ -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/lib/   -o egnaroc.dll
/usr/bin/x86_64-w64-mingw32-ld: obj/texture.o:texture.c:(.text+0xc17): неопределённая ссылка на «__imp_glTexImage3D»
/usr/bin/x86_64-w64-mingw32-ld: obj/texture.o:texture.c:(.text+0x19fa): неопределённая ссылка на «__imp_glCompressedTexImage2D»
/usr/bin/x86_64-w64-mingw32-ld: obj/texture.o:texture.c:(.text+0x1ff4): неопределённая ссылка на «__imp_glTexImage3D»
/usr/bin/x86_64-w64-mingw32-ld: obj/shader.o:shader.c:(.text+0x134b): неопределённая ссылка на «__imp_glActiveTexture»
/usr/bin/x86_64-w64-mingw32-ld: obj/shader.o:shader.c:(.text+0x19e8): неопределённая ссылка на «__imp_glActiveTexture»
/usr/bin/x86_64-w64-mingw32-ld: obj/shader.o:shader.c:(.text+0x1ae8): неопределённая ссылка на «__imp_glActiveTexture»
/usr/bin/x86_64-w64-mingw32-ld: obj/shader.o:shader.c:(.text+0x1bc8): неопределённая ссылка на «__imp_glActiveTexture»
collect2: error: ld returned 1 exit status
make: *** [Makefile:101: egnaroc.dll] Ошибка 1
dron@gnu:~/egnaroc$ 

Тоже самое но с -v

dron@gnu:~/egnaroc$ make TARGET=Windows -j24
x86_64-w64-mingw32-gcc -v obj/physics.o obj/egnaroc.o obj/ui.o obj/entity.o obj/threader.o obj/event.o obj/asset.o obj/network.o obj/graphics.o obj/engine.o obj/audio.o obj/ui_style.o obj/ui_slider.o obj/ui_container.o obj/nuklear.o obj/ui_toast.o obj/ui_line.o obj/ui_rectangle.o obj/ui_text.o obj/ui_option.o obj/ui_button.o obj/ui_listbox.o obj/ui_dialog.o obj/ui_textbox.o obj/ui_spinner.o obj/ui_browser.o obj/renderable.o obj/texture.o obj/sound.o obj/music.o obj/language.o obj/config.o obj/shader.o obj/animation.o obj/font.o obj/effect.o obj/material.o obj/cmesh.o obj/terrain.o obj/image.o obj/skeleton.o obj/mouse.o obj/dragdrop.o obj/keyboard.o obj/joystick.o obj/instance_object.o obj/landscape.o obj/animated_object.o obj/light.o obj/physics_object.o obj/particles.o obj/camera.o obj/static_object.o obj/list.o obj/dict.o obj/vertex_list.o obj/int_list.o obj/randf.o obj/trigger.o obj/vertex_hashtable.o obj/spline.o obj/renderer.o obj/sky.o obj/SDL_local.o -lmingw32 -lopengl32 -lSDL2main -lSDL2 -mwindows -lSDL2_mixer -lSDL2_net -shared  -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/bin/  -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/lib/  -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/bin/ -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/lib/  -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/bin/ -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/lib/   -o egnaroc.dll
Using built-in specs.
COLLECT_GCC=x86_64-w64-mingw32-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/lto-wrapper
Target: x86_64-w64-mingw32
Configured with: ../../src/configure --build=x86_64-linux-gnu --prefix=/usr --includedir='/usr/include' --mandir='/usr/share/man' --infodir='/usr/share/info' --sysconfdir=/etc --localstatedir=/var --disable-silent-rules --libdir='/usr/lib/x86_64-linux-gnu' --libexecdir='/usr/lib/x86_64-linux-gnu' --disable-maintainer-mode --disable-dependency-tracking --prefix=/usr --enable-shared --enable-static --disable-multilib --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --libdir=/usr/lib --enable-libstdcxx-time=yes --with-tune=generic --with-headers=/usr/x86_64-w64-mingw32/include --enable-version-specific-runtime-libs --enable-fully-dynamic-string --enable-libgomp --enable-languages=c,c++,fortran,objc,obj-c++,ada --enable-lto --enable-threads=win32 --program-suffix=-win32 --program-prefix=x86_64-w64-mingw32- --target=x86_64-w64-mingw32 --with-as=/usr/bin/x86_64-w64-mingw32-as --with-ld=/usr/bin/x86_64-w64-mingw32-ld --enable-libatomic --enable-libstdcxx-filesystem-ts=yes --enable-dependency-tracking
Thread model: win32
gcc version 8.3-win32 20190709 (GCC) 
COMPILER_PATH=/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/:/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/:/usr/lib/gcc/x86_64-w64-mingw32/:/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/:/usr/lib/gcc/x86_64-w64-mingw32/:/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/../../../../x86_64-w64-mingw32/bin/
LIBRARY_PATH=/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/:/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/../../../../x86_64-w64-mingw32/lib/
COLLECT_GCC_OPTIONS='-v' '-mwindows' '-shared' '-L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/bin/' '-L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/lib/' '-L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/bin/' '-L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/lib/' '-L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/bin/' '-L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/lib/' '-o' 'egnaroc.dll' '-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/collect2 -plugin /usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/lto-wrapper -plugin-opt=-fresolution=/tmp/ccNDveRD.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lgdi32 -plugin-opt=-pass-through=-lcomdlg32 -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -m i386pep --subsystem windows --shared -Bdynamic -e DllMainCRTStartup --enable-auto-image-base -o egnaroc.dll /usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/../../../../x86_64-w64-mingw32/lib/dllcrt2.o /usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/crtbegin.o -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/bin/ -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/lib/ -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/bin/ -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/lib/ -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/bin/ -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/lib/ -L/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32 -L/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/../../../../x86_64-w64-mingw32/lib obj/physics.o obj/egnaroc.o obj/ui.o obj/entity.o obj/threader.o obj/event.o obj/asset.o obj/network.o obj/graphics.o obj/engine.o obj/audio.o obj/ui_style.o obj/ui_slider.o obj/ui_container.o obj/nuklear.o obj/ui_toast.o obj/ui_line.o obj/ui_rectangle.o obj/ui_text.o obj/ui_option.o obj/ui_button.o obj/ui_listbox.o obj/ui_dialog.o obj/ui_textbox.o obj/ui_spinner.o obj/ui_browser.o obj/renderable.o obj/texture.o obj/sound.o obj/music.o obj/language.o obj/config.o obj/shader.o obj/animation.o obj/font.o obj/effect.o obj/material.o obj/cmesh.o obj/terrain.o obj/image.o obj/skeleton.o obj/mouse.o obj/dragdrop.o obj/keyboard.o obj/joystick.o obj/instance_object.o obj/landscape.o obj/animated_object.o obj/light.o obj/physics_object.o obj/particles.o obj/camera.o obj/static_object.o obj/list.o obj/dict.o obj/vertex_list.o obj/int_list.o obj/randf.o obj/trigger.o obj/vertex_hashtable.o obj/spline.o obj/renderer.o obj/sky.o obj/SDL_local.o -lmingw32 -lopengl32 -lSDL2main -lSDL2 -lSDL2_mixer -lSDL2_net -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -lgdi32 -lcomdlg32 -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt /usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/crtend.o
/usr/bin/x86_64-w64-mingw32-ld: obj/texture.o:texture.c:(.text+0xc17): неопределённая ссылка на «__imp_glTexImage3D»
/usr/bin/x86_64-w64-mingw32-ld: obj/texture.o:texture.c:(.text+0x19fa): неопределённая ссылка на «__imp_glCompressedTexImage2D»
/usr/bin/x86_64-w64-mingw32-ld: obj/texture.o:texture.c:(.text+0x1ff4): неопределённая ссылка на «__imp_glTexImage3D»
/usr/bin/x86_64-w64-mingw32-ld: obj/shader.o:shader.c:(.text+0x134b): неопределённая ссылка на «__imp_glActiveTexture»
/usr/bin/x86_64-w64-mingw32-ld: obj/shader.o:shader.c:(.text+0x19e8): неопределённая ссылка на «__imp_glActiveTexture»
/usr/bin/x86_64-w64-mingw32-ld: obj/shader.o:shader.c:(.text+0x1ae8): неопределённая ссылка на «__imp_glActiveTexture»
/usr/bin/x86_64-w64-mingw32-ld: obj/shader.o:shader.c:(.text+0x1bc8): неопределённая ссылка на «__imp_glActiveTexture»
collect2: error: ld returned 1 exit status
make: *** [Makefile:101: egnaroc.dll] Ошибка 1
dron@gnu:~/egnaroc$ 

libopengl32 это же просто заглушка так? Окай, иду сюда cd /usr/x86_64-w64-mingw32/lib/ и ищу функции

dron@gnu:/usr/x86_64-w64-mingw32/lib$ nm ./*.a | grep glTexImage
0000000000000000 T glTexImage2D
0000000000000000 I __imp_glTexImage2D
0000000000000000 T glTexImage1D
0000000000000000 I __imp_glTexImage1D
dron@gnu:/usr/x86_64-w64-mingw32/lib$ nm ./* | grep glActiveTexture
dron@gnu:/usr/x86_64-w64-mingw32/lib$ nm ./* | grep glCompressedTexImage2D
dron@gnu:/usr/x86_64-w64-mingw32/lib$ 

Эмм, окай нету ничего и понятное дело откуда ошибки, хотя с другой стороны я же определяю расширения через SDL_GL_GetProcAddress и нужных функций по дефолту может просто не быть.

Иду в место где у меня определяются gl функции. Там я экранирую оперделение именно их потому что они по дефолту определены в SDL/SDL_opengl.h и если убрать экранирование определения функций то уже сборка валится из за переопределения функций, но приведу то как идёт загрузка расширений

sdl_local.h


typedef void (APIENTRY * GLACTIVETEXTUREFN)( GLenum texture );
typedef void (APIENTRY * GLCOMPRESSEDTEXIMAGE2DFN)(GLenum target, GLint level, GLenum format, GLsizei width, GLsizei height, GLint border, GLsizei imagesize, const GLvoid* data);
typedef void (APIENTRY * GLTEXIMAGE3DFN)(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* data);


#ifndef __MINGW32__ 
#ifndef __unix__ 
extern GLACTIVETEXTUREFN                  glActiveTexture;
extern GLCOMPRESSEDTEXIMAGE2DFN           glCompressedTexImage2D;
extern GLTEXIMAGE3DFN                     glTexImage3D;
#endif
#endif

sdl_local.c

#ifndef __MINGW32__ 
#ifndef __unix__
GLACTIVETEXTUREFN glActiveTexture = NULL;
GLCOMPRESSEDTEXIMAGE2DFN glCompressedTexImage2D = NULL;
GLTEXIMAGE3DFN glTexImage3D = NULL;
#endif
#endif

#define SDL_GL_LoadExtension(type, name) \
name = (type)SDL_GL_GetProcAddress(#name); \
if (name == NULL) { \
  fprintf(stderr, "Failed to load function '%s', looking for function '%s'...\n", #name, #name"EXT"); \
  name = (type)SDL_GL_GetProcAddress(#name"EXT"); \
} \
if (name == NULL) { \
  fprintf(stderr, "Failed to load function '%s', looking for function '%s'...\n", #name"EXT", #name"ARB"); \
  name = (type)SDL_GL_GetProcAddress(#name"ARB"); \
} \
if (name == NULL) { fprintf(stderr, "Completely failed to load OpenGL extension function '%s'. Use of this function will crash\n", #name); }


#ifndef __MINGW32__ 
#ifndef __unix__
  SDL_GL_LoadExtension(GLACTIVETEXTUREFN, glActiveTexture);
  SDL_GL_LoadExtension(GLCOMPRESSEDTEXIMAGE2DFN, glCompressedTexImage2D);
  SDL_GL_LoadExtension(GLTEXIMAGE3DFN, glTexImage3D);
#endif
#endif 

Для Windows cобираю на Debian testing, mingw системный, SDL библиотеки из официальных ссылок. Никакой отсебятины лишней.

Сама сборка идёт вот так Makefile

SRC = $(wildcard src/*.c) $(wildcard src/*/*.c)
OBJ = $(addprefix obj/,$(notdir $(SRC:.c=.o)))

CFLAGS = -I ./include -std=gnu99 -Wextra -Wall -Werror -Wno-unused -Wno-unused-parameter -O3 
LFLAGS = -lSDL2 -lSDL2_mixer -lSDL2_net -lm -shared

PLATFORM = $(shell uname)
###########################################
ifeq ($(findstring Linux,$(PLATFORM)),Linux)
	DYNAMIC = libegnaroc.so
	STATIC  = libegnaroc.a
	CFLAGS += -fPIC
	LFLAGS += -lGL
ifeq ($(findstring Windows,$(TARGET)),Windows)
	CC = x86_64-w64-mingw32-gcc -v
	AR = x86_64-w64-mingw32-gcc-ar 
	DYNAMIC =  egnaroc.dll
	STATIC  =  libegnaroc.a
#	CFLAGS += -Dmain=SDL_main 
	LFLAGS  = -lmingw32 -lopengl32 -lSDL2main -lSDL2 -mwindows -lSDL2_mixer -lSDL2_net -shared 
	LFLAGS += -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/bin/ 
	LFLAGS += -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/lib/ 
	CFLAGS += -I./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/include/
	CFLAGS += -I./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/  -Dmain=SDL_main 
	LFLAGS += -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/bin/
	LFLAGS += -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/lib/ 
	CFLAGS += -I./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/include/ 
	LFLAGS += -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/bin/
	LFLAGS += -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/lib/ 
	CFLAGS += -I./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/include/ 
ifeq ($(findstring i686,$(ARCH)),i686)
	CC = i686-w64-mingw32-gcc  
	AR = i686-w64-mingw32-gcc-ar 
	DYNAMIC =  egnaroc.dll
	STATIC  =  libegnaroc.a
	CFLAGS += -Dmain=SDL_main 
	LFLAGS  = -lmingw32 -lopengl32 -lSDL2main -lSDL2 -mwindows -lSDL2_mixer -lSDL2_net -shared 
	LFLAGS += -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/i686-w64-mingw32/bin/ 
	LFLAGS += -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/i686-w64-mingw32/lib/ 
	CFLAGS += -I./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/i686-w64-mingw32/include/
	CFLAGS += -I./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/
	LFLAGS += -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/i686-w64-mingw32/bin/
	LFLAGS += -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/i686-w64-mingw32/lib/ 
	CFLAGS += -I./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/i686-w64-mingw32/include/ 
	LFLAGS += -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/i686-w64-mingw32/bin/
	LFLAGS += -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/i686-w64-mingw32/lib/ 
	CFLAGS += -I./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/i686-w64-mingw32/include/
endif
endif 
endif

#############################################
###TODO: NEED TEST BUILD 
ifeq ($(findstring Darwin,$(PLATFORM)),Darwin)
	DYNAMIC = libegnaroc.so
	STATIC  = libegnaroc.a
	CFLAGS += -fPIC
#	LFLAGS += -lGL
	LFLAGS += -framework OpenGL
endif

#############################################
###TODO: NEED TEST BUILD
ifeq ($(findstring MINGW,$(PLATFORM)),MINGW)
	DYNAMIC = egnaroc.dll
	STATIC =  libegnaroc.a
	LFLAGS = -lmingw32 -lopengl32 -lSDL2main -lSDL2 -lSDL2_mixer -lSDL2_net -shared -g
endif
#############################################
###TODO: NEED TEST BUILD
ifeq ($(findstring CYGWIN,$(PLATFORM)),CYGWIN)
	DYNAMIC = egnaroc.dll
	STATIC =  libegnaroc.a
	LFLAGS = -lmingw32 -lopengl32 -lSDL2main -lSDL2 -lSDL2_mixer -lSDL2_net -shared -g
endif


all:$(STATIC) $(DYNAMIC) 

static:$(STATIC)

dynamic:$(DYNAMIC)

$(DYNAMIC): $(OBJ)
	$(CC) $(OBJ) $(LFLAGS)  -o $@
	
$(STATIC): $(OBJ)
	$(AR) rcs $@ $(OBJ) 
	
obj/%.o: src/%.c | obj
	$(CC) $< -c $(CFLAGS) -o $@

obj/%.o: src/*/%.c | obj
	$(CC) $< -c $(CFLAGS) -o $@


И как быть? И да я пробовал прилинковать glew и прочий мусор, всё одножренственно. И ещё раз да я хочу грузить расширения через SDL_GL_GetProcAddress, а не через утилитарные библиотеки.

Короче я изнежился тем что в Linux всё тупо работает из коробки и у меня прям растеряшки ^.^ а может просто лапки я хз :D

И да я гуглил проблему, перечислять всё не буду но первые 50 ссылок в гугле я видал, читал и пробовал, нихрена непонятно.

Тут дело не в том что не работает, туту дело в том что я непонимаю что я делаю не так. По идее на этапе сборки должно быть ровно похер на то что есть ли у меня где то функции во вне или нет. Но… короче, вот =)

UDP

Для себя корче я временно (пока не понял кто виноват в подобном поведении mingw или sdl2) скопировал SDL_opengl.h и изменил его добавив ко всем опеределениям

#if !defined(__MINGW32__) 
GLAPI APIENTRY blabla bla
#endif

а в нужных местах переключаю заголовки

#if defined(__MINGW32__)
#include "SDL2/SDL_local_opengl.h"
#else 
#include "SDL2/SDL_opengl.h"
#endif

На форуме SDL ещё с 2016 года висит подобный вопрос, но никто не ответил, я фигею. https://discourse.libsdl.org/t/glactivetexture-declaration/22001

Я библиотеку собрал, под вайном запустил и всплакнул, вылезли всякие fixme из mingw-w64, и артефакты странные, придётся накатить венду и проверить ещё там, благо осталась лицензионка на разделе ноута (если живая ещё хехе) Всем спасибо за советы

-lmingw32 -lopengl32 -lSDL2main -lSDL2 -mwindows -lSDL2_mixer -lSDL2_net -shared

Почему -lopengl32 находится не после библиотек, которые его используют (SDL2), а перед? У GCC очень тупой линковщик, он не умеет без костылей строить деревья зависимостей вызовов функций.

Но вряд ли проблема из-за этого.

EXL ★★★★★ ()
Ответ на: комментарий от pihter

Да пилю то я игру, в качестве движка Corange, а вернее его форк который я допиливаю под нужды игры и не более того. Ну там анимированные текстуры и абстракции от SDL для удобства. Ничего шибко особенного.

LINUX-ORG-RU ★★ ()
Ответ на: комментарий от EXL

Ну я поменял порядок линковки, но тоже самое. Вообще я как думал, что -lopengl32 просто имеет ссылку на opengl32.dll где уже всё что надо есть, а на этапе компиляции символов может и не быть (я же их сам объявляю загружая расширения), а там оказывается список gl функций (я nm выше привёл) где оно явно задано. SDL по дефолту определяет нужные GL функции которые не требуют пользовательской загрузки в виде расширений, поэтому я экранирую если это unix или mingw32 задано перепроцессором, так как иначе идёт переопределение и всё валится на ошибках. Короче я что-то запутался. В libopengl32 mingw нужных символов нет, мне кажется именно я что-то делаю не так.

LINUX-ORG-RU ★★ ()
Ответ на: комментарий от mittorn

На линкуй opengl32, получай все функции через SDL_GL_GetProcAddress.

Ну, сейчас попробую вообще все используемые gl функции загрузить руками, просто я смотрю в интернетах линкуют и у них всё робит, 100500 статей мол как всё просто и легко =) Вот я и подумал что просто я чего то не допонимаю. Пойду пробовать полностью всё определять, ток это нифига не удобно =)

LINUX-ORG-RU ★★ ()
Ответ на: комментарий от EXL

Вообще то умеет (пруф искать лень, но я так делал), но вот в угоду быстродействия это по умолчанию отключено. И работает это без всякого графа, что под виндой, что под онтопиком. Только в офтопике врубленно по умолчанию поэтому написанные индусами сборочные файлы работают, но медленно.

pon4ik ★★★★★ ()
Ответ на: комментарий от mittorn

У я выше привёл как загружаю расширения, большее не нужно, короче я немного удивлён, у меня SDL для mingw оффициальный, но в нём оперделены gl функции не как расширения которые по дефолту отсуцтвуют в mingw libopengl32.a тоесть использование этих функций которые просто без оборачивания в ifdef есть в sdl_opengl.h являются для mingw нерабочими в принципе, но! если я уже в своём коде делаю загрузку их как расширения то получаю ошибки редеклараци, тоесть по дефолту я не могу использовать ни так ни эдак, это странно, я взял sdl_opengl.h и тупо убрал от туда объявления glTexImage3D и других которые вызывают ошибку, по итогу моя библиотека корректно собралась. Но это ведь бредятина! Я не должен совать и что-то менять в заголовочных файлах SDL. Пока просто подумаю как быть дальше, сторонние утилитные библиотеки я не хочу, но видимо мне придётся как выше сказали сделать все объявления для OpenGL руками от типов,енумов до функций.

Надо подумать, и мне вот интересно стало Даниэль автор Corange от балды писал сборку под windows? :D Она же тупо не работает ))))))))))))))) Может попозже спрошу сколько лет назад он сам вообще пытался собрать свой же проект )))) Хотя может на реальной винде что-то по другому, я хз у меня её нет (но видимо придётся накатить в виртуалку проверить что тут за херня)

LINUX-ORG-RU ★★ ()
Ответ на: комментарий от pon4ik

Да это игрался, мне надо было искусственно вызывать в системе лаги и я компилил так ))) Замирание системы обеспеченно ) сюда попало считай случайно , забей, поток на ядро -j6 у меня

LINUX-ORG-RU ★★ ()
Ответ на: комментарий от anonymous

Mingw который говно или mingw который w64?

w64 дебиановский

Собираете crossdev или на windows?

crossdev

Я не знаю что это, просто свой Makefile с прямыми путями довсего нужного

windows

Сборку на винде не планирую, если только проверять работу собранного

LINUX-ORG-RU ★★ ()
Ответ на: комментарий от LINUX-ORG-RU

Может тебе вообще не линковаться к этой либе, а использовать виндовые обёртки типа dlopen? Раз ты там какие-то нестрандартные расширения юзаешь.

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

Ну тут выше предложили это, но я хз как всё это делать для винды правильно #pragma comment использовать? Ды оно не работает с mingw , а если не линковать libopengl32 которая как я понял прилинкована к динамической уже системной opengl32.dll то вообще ничего работать не будет, так или иначе странности с SDL_opengl.h никуда не денутся. Ну в шапке я дописал как я это обхожу, ща посижу погуглю.

Короче чёт я не так делаю, в интернетах все юзают без проблем кросскомпиляцию линкуются с libopengl32, с какогото перепуга загружают gl расширения имея дело с SDL_opengl.h которое делает невозможным в дефолте оперделять расширения ибо там ошибки переопределения функций.

Сейчас всё собирается, запускается и работает под wine. накатил винду в вируталку проверил webgl в браузере робит значит и моё должно, скинул всё запускаю логи не пашут (printf не пишет ничего) окно запускается и гаснет, простейший пример с SDL работает без проблем Кросскомпиляция mingw , статическая линковка SDL2, причём при динамической линковке всё ок, при статик сборке тоже не работает printf.

ЧуднО короче, для linux собирать, чпок, хлоп, бац и всё работает. Для винды одни траблы, чуть позже пойду ка я на гитахаб наверное и Даниэлю напишу мол какого **я Денька, ты свой Коранж собирал хоть раз для винды или где? )))))))))))))))

LINUX-ORG-RU ★★ ()
Ответ на: комментарий от LINUX-ORG-RU

Короче, пробую отвязаться от libopengl32 и выкинуть SDL_opengl.h

И весь используемый OpenGL от и до определить у себя локально, типы, дефайны, и всё остальное. Плюс в том что всё будет явное минус в том что я делаю дубликат SDL утилитарной функциональности что выглядит как то по тупому, но по другому как сделать всё прямо я уже не знаю, mingw не предоставляет символов, копать в него смысла нет, SDL делает объявления некоторых функций без extern считая что они 100% будут в любой поставке OpenGL хотя они знают что в стоковом mingw нет этой поддержки, но тем не менее SDL предоставляет сборку для mingw где вся эта катавасия тупо сломана, хотя ничего им бы не стоило обернуть несколько define для полной корректной работы. Разрабам писал, на форум им писал, молчат. Дурдом какой то. Ну если всякие glew/glut/glxx использовать которые внутри себя всё скрывают может проблем и не будет, но это костыли, базовые вещи по моему тупо сломаны или я чего-то не понимаю. Сук аж бесит агрррр пойку укушу со злости печеньку за жопку, пусть страдает тварь мучная! У меня на сегодня всё. ёпрст

LINUX-ORG-RU ★★ ()
Ответ на: комментарий от a1batross

Уже, генерировать ничего не собераюсь, нафиг надо, я всё ручками объявляю, для начала всё что в SDL_opengl.h но все GL функции в виде расширений у меня, этого мне хватит, если нужно будет ещё я буду брать из SDL_opengl_glext.h

LINUX-ORG-RU ★★ ()
Ответ на: комментарий от Deleted

id software начинали в 90х, или помоему даже раньше. у них свои фреймворки и подходы к разработке и прочее.

если ты пишешь игруху под винду и у тебя не AAA тайтл, т.е. ты не можешь выбрасывать просто миллионы денег в мусорку - то использовать что-то кроме DirectX для низкоуровневой платформы - смысла нет

lovesan ★☆ ()
Ответ на: комментарий от lovesan

Объективно - DirectX - стройный и удобный пайплайн, позволяющий максимально прямо работать с современным железом. OpenGL же - нагромождение кривых костылей, сдобренных легаси.

Про дрова даже не буду говорить, насколько они для DX прямее

lovesan ★☆ ()
Ответ на: комментарий от lovesan

у них свои фреймворки и подходы к разработке и прочее.

Проиграл, че за дичь ты задвигаешь?

то использовать что-то кроме DirectX для низкоуровневой платформы - смысла нет

Первый сайт из гугла беру: https://shazoo.ru/2015/09/23/33503/valve-vulkan-luchshe-chem-directx-12

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

Я в свое время DirectX прикрутил к коммонлиспу, и заебок на нем какие-то вещи хреначил. Очень удобно и стройно. OpenGL пробовал, но просто устал от попыток заставить это нагромождение костылей двигаться.

lovesan ★☆ ()