Search code examples
cdllmakefilesdlexecutable

Trouble creating a transferable executable with SDL 1.2 and C


I've been having trouble compiling an executable with SDL 1.2 and C that will work on another machine. I'vee been compiling it from Ubuntu using a makefile. I'd like to be able to send a "bin.zip" to a classmate, with "SDL.dll" and "SDL_ttf.dll" inside as well as "prog" the executable that I compiled for them.

I would expect them to be able to run that "prog" from their own Ubuntu desktop (Virtual Machine, if that's relevant) and not need to install libsdl1.2debian and libsdl-ttf2.0-0 themselves first, since I included the DLLs.

Note that they can run it fine once they've installed those libraries.

My project structure, at compilation, is such:

  • 2048-c
    • /bin (dlls and executable)
    • /include (".h" header files)
    • /lib ("SDL.lib", "SDL_ttf.lib", "SDLmain.lib")
    • /src (".c" source files)
    • "makefile"

My makefile looks like this:

CC=gcc

CFLAGS=-c -Wall `sdl-config --cflags`
LDFLAGS=`sdl-config --libs` -lSDL_ttf
SOURCES=src/main.c src/toolbox.c src/game.c
OBJECTS=$(SOURCES:.c=.o)
EXECUTABLE=bin/prog

.PHONY: clean
all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
    $(CC) $(OBJECTS) $(LDFLAGS) -o $@
.c.o:
    $(CC) $(CFLAGS) $< -o $@

clean:
    rm -f $(OBJECTS) $(EXECUTABLE)

Am I missing something obvious? Edit: (Yes, I was)


Solution

  • Yes, I was missing something obvious : DLLs are specifically for Windows

    Now, as for getting an executable to work without installing the required libraries, I still haven't managed that (linking statically didn't pan out, in my case), but at least I learnt something.

    If I give cross-compilation to Windows a try, I'll try to update this.