Попробовал тут под винду собрать проект, обламался. Думаю надо что-то простое собрать и проверить. Cуть в том что не работает статическая компиляция
Ну и делаю так собираю библиотеку, её подключает простая программка и ещё она подлючает ещё SDL2. Из библиотеки для теста просто в консоль чиселко, а SDL рисует треугольник
Собирается всё так
CC=x86_64-w64-mingw32-gcc
AR=x86_64-w64-mingw32-ar
LFLAGS= -lmingw32
CFLAGS= -fPIC
makelib:
$(CC) -c lib.c -o lib.o
$(AR) rcs lib.a lib.o
$(CC) -shared lib.o -o lib.dll
makeapp:
$(CC) -c app.c -o app.o -I./include
$(CC) app.o lib.a -L./ -lSDL2 -o app.exe
makeappstatic:
$(CC) -c app.c -o app.o -I./include
$(CC) app.o lib.a libSDL2.a -o app.exe
lib.h
int lib(int x);
lib.c
#include "lib.h"
int lib(int x)
{
return x+x;
}
app.c
#include <stdio.h>
#include "SDL2/SDL.h"
int WinMain(int argc, char* argv[])
{
printf("%d\n",lib(50));
if (SDL_Init(SDL_INIT_VIDEO) == 0) {
SDL_Window* window = NULL;
SDL_Renderer* renderer = NULL;
if (SDL_CreateWindowAndRenderer(640, 480, 0, &window, &renderer) == 0) {
SDL_bool done = SDL_FALSE;
while (!done) {
SDL_Event event;
SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE);
SDL_RenderDrawLine(renderer, 320, 200, 300, 240);
SDL_RenderDrawLine(renderer, 300, 240, 340, 240);
SDL_RenderDrawLine(renderer, 340, 240, 320, 200);
SDL_RenderPresent(renderer);
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
done = SDL_TRUE;
}
}
}
}
if (renderer) {
SDL_DestroyRenderer(renderer);
}
if (window) {
SDL_DestroyWindow(window);
}
}
SDL_Quit();
return 0;
}
Ну и далее, тут всё нормально выводит 100 и окошко с треугольником
make makelib
make makeapp
wine app.exe
А вот если линкую статически libSDL.a то
make makelib
make makeapp
dron@gnu:~/egnaroc/wip/mingw$ make makeappstatic
x86_64-w64-mingw32-gcc -c app.c -o app.o -I./include
x86_64-w64-mingw32-gcc app.o lib.a libSDL2.a -o app.exe
/usr/bin/x86_64-w64-mingw32-ld: libSDL2.a(SDL_windows.o): в функции «WIN_CoInitialize»:
/Users/valve/release/SDL/SDL2-2.0.10-source/foo-x64/../src/core/windows/SDL_windows.c:76: неопределённая ссылка на «__imp_CoInitializeEx»
/usr/bin/x86_64-w64-mingw32-ld: libSDL2.a(SDL_windows.o): в функции «WIN_CoUninitialize»:
/Users/valve/release/SDL/SDL2-2.0.10-source/foo-x64/../src/core/windows/SDL_windows.c:95: неопределённая ссылка на «__imp_CoUninitialize»
/usr/bin/x86_64-w64-mingw32-ld: libSDL2.a(SDL_windowskeyboard.o): в функции «IME_SetupAPI»:
...
...
# и так далее ld ругается, но,почему?
Если собирать
makeappstatic:
$(CC) -c app.c -o app.o -I./include
$(CC) app.o lib.a libSDL2.dll.a libSDL2.a -o app.exe
То сборка проходит, но понятное дело wine требует SDL2.dll
P.S. Я не собираюсь по итогу всё статически собирать, в этом смысла особого нет пока что, но просто не пойму, почему ld то тугается
SDL2 отсюда https://www.libsdl.org/release/SDL2-devel-2.0.10-mingw.tar.gz понятное дело, пересобирать самому под mingw наверное смысла нету