【发布时间】:2022-01-17 20:08:16
【问题描述】:
我在使用 SDL 1.2 和 C 编译可在另一台机器上运行的可执行文件时遇到问题。我一直在使用 makefile 从 Ubuntu 编译它。我希望能够将“bin.zip”发送给同学,其中包含“SDL.dll”和“SDL_ttf.dll”以及“prog”我为他们编译的可执行文件。
我希望他们能够从自己的 Ubuntu 桌面运行“prog”(虚拟机,如果相关的话),而无需先自己安装 libsdl1.2debian 和 libsdl-ttf2.0-0 ,因为我包含了 DLL。
请注意,一旦安装了这些库,他们就可以正常运行。
我的项目结构,在编译时是这样的:
- 2048-c
- /bin(dll 和可执行文件)
- /include(“.h”头文件)
- /lib(“SDL.lib”、“SDL_ttf.lib”、“SDLmain.lib”)
- /src(“.c”源文件)
- “生成文件”
我的 makefile 如下所示:
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)
我是否遗漏了一些明显的东西?编辑:(是的,我是)
【问题讨论】:
-
看起来您正在为 Linux 构建,但随后您提到了
.dll文件,它们是 Windows 共享库。 -
如果您真的希望能够在另一个 Linux 系统上运行构建在一个 Linux 系统上的可执行文件,您应该尝试静态链接。链接时添加
-static。它可能仍然不起作用,因为某些库无法静态链接,并且两个系统之间可能存在 ABI 差异。但至少比动态链接(默认)和尝试使用 Windows DLL 的机会更大。 -
如果你在 Linux 机器上编译尝试为 Windows 目标编译,你需要交叉编译。我认为你可以在 Ubuntu 上使用 gcc-mingw-w64 包。这里我曾经有过类似的打算:stackoverflow.com/questions/34795694/…
-
> 看起来您正在为 Linux 构建,但随后您提到了作为 Windows 共享库的 .dll 文件,这将是我所缺少的显而易见的东西。当。谢谢。谢谢丹尼
-
欢迎来到 StackOverflow!请使用tour 并阅读一些help center 以了解该站点的工作原理。它不是一个论坛。 ——你的问题回答了吗?如果是这样,请添加答案并稍后标记它。如果没有,edit 你的问题并澄清。
标签: c dll makefile sdl executable