SDL2 + g++ zamieszanie 32bit i 64bit - błędy linkera

0

Witam, ostatnio chciałem pobawić sie SDL'em. (mam windowsa 7 x64), więc poszukałem conieco i znalazłem to: http://lazyfoo.net/tutorials/SDL/01_hello_SDL/windows/mingw/index.php

Wchodze na stronke http://libsdl.org/download-2.0.php i pobieram SDL2-devel-2.0.8-mingw.tar.gz (MinGW 32/64-bit)

Wypakowywuje to i tam są dwa foldery** i686-w64-mingw32 i x86_64-w64-mingw32**. Jako, ze chce mieć tego SDL'a 32bit to do swojego katalogu ze źródełkami itp ("C:\dev") wrzucam rzeczy z x86_64-w64-mingw32 (no bo 32 bit wkoncu). Z tej samej strony pobieram "SDL2-2.0.8-win32-x86.zip (32-bit Windows)"

Do kompilacji używam tego:
g++ -m32 01_hello_SDL.cpp -IC:\dev\include\SDL2 -LC:\dev\lib -w -Wl,-subsystem,windows -lmingw32 -lSDL2main -lSDL2 -o 01_hello_SDL

I dostaje błędy linkera
"undefined reference to `SDL_Init'"

O co tu chodzi? Coś z tymi nagłówkami/libkami musi być nie tak, ale nie mam pojęcia.
w C:/dev - 32bitowe
SDL2.dll - 32bit

A i jeszcze spytam... Jak będę chciał używać tych aplikacji SDLowych to zawsze musze mieć tą .dll w katalogu ze skompilowanym programem?

0

undefined reference to `SDL_Init'

To jest błąd linker'a, i oznacza, że linker nie mógł znaleźć definicji symbolu SDL_Init.
Powodów może być kilka. Zwykle oznacza to, że potrzebna biblioteka nie została dołączona do procesu budowania, albo została dodana w niewłaściwej wersji.
Najprawdopodobniej brakuje ci -l<jakaś biblioteka>.
Inne wyjaśnienie to używasz biblioteki SDL dla Visual Studio zamiast dla MinGW.

1

wrzucam rzeczy z x86_64-w64-mingw32 (no bo 32 bit wkoncu).

x86_64 zdecydowanie oznacza wersję 64-bitową.

0

Racja, co za cep ze mnie.

Czyli, skoro mam 64bit windowsa to używam których nagłówków i686-w64-mingw32 czy x86_64-w64-mingw32?

Chyba że obydwie zadziałają, a trzeba będzie tylko .dll odpowiednie do wersji z którą skompilowałem

0
Rivit napisał(a):

Racja, co za cep ze mnie.

Czyli, skoro mam 64bit windowsa to używam których nagłówków i686-w64-mingw32 czy x86_64-w64-mingw32?

To zależy, czy chcesz skompilować program w wersji 32- czy 64-bitowej.

0
Rivit napisał(a):

A i jeszcze spytam... Jak będę chciał używać tych aplikacji SDLowych to zawsze musze mieć tą .dll w katalogu ze skompilowanym programem?

Nie, nie musisz. Żeby nie dostarczać dll'ek razem z aplikacją, należy dokonać linkowania statycznego, wtedy linker 'doklei' daną bibliotekę do pliku wykonywalnego.

0

a czy bitowość g++ ma coś do rzeczy?

+jak zrobić właśnie linkowanie statyczne, próbowałem coś sam pogrzebać ale wywala mi dużo undefined reference :/

To mój makefile, jak tu dodać linkowanie statyczne?

CC = g++

INCLUDE_PATHS = -IC:\dev\include\SDL2
LIBRARY_PATHS = -LC:\dev\lib

COMPILER_FLAGS = -w -Wl,-subsystem,windows
LINKER_FLAGS = -lmingw32 -lSDL2main -lSDL2

OBJS = 01_hello_SDL.cpp

OBJ_NAME = a.exe

all : $(OBJS)
	$(CC) $(OBJS) $(INCLUDE_PATHS) $(LIBRARY_PATHS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME)
0
Rivit napisał(a):

+jak zrobić właśnie linkowanie statyczne, próbowałem coś sam pogrzebać ale wywala mi dużo undefined reference :/

Dodaj do flag linkera -static

1 użytkowników online, w tym zalogowanych: 0, gości: 1