【问题标题】:Trouble creating a transferable executable with SDL 1.2 and C使用 SDL 1.2 和 C 创建可传输的可执行文件时遇到问题
【发布时间】:2022-01-17 20:08:16
【问题描述】:

我在使用 SDL 1.2 和 C 编译可在另一台机器上运行的可执行文件时遇到问题。我一直在使用 makefile 从 Ubuntu 编译它。我希望能够将“bin.zip”发送给同学,其中包含“SDL.dll”和“SDL_ttf.dll”以及“prog”我为他们编译的可执行文件。

我希望他们能够从自己的 Ubuntu 桌面运行“prog”(虚拟机,如果相关的话),而无需先自己安装 libsdl1.2debianlibsdl-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


【解决方案1】:

是的,我遗漏了一些明显的东西:DLL 专门用于 Windows

现在,至于在不安装所需库的情况下让可执行文件工作,我仍然没有做到(在我的情况下,静态链接没有成功),但至少我学到了一些东西。

如果我尝试对 Windows 进行交叉编译,我会尝试更新它。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-11-14
  • 2011-12-03
  • 1970-01-01
  • 2013-06-22
  • 2018-07-20
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多