首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨平台静态链接SDL2

跨平台静态链接SDL2
EN

Stack Overflow用户
提问于 2015-08-05 23:58:38
回答 2查看 5.7K关注 0票数 4

我正在构建一个SDL2/C++程序,它需要可以移植到可能没有安装SDL的Windows、Mac和Linux计算机上。

我读到过静态链接是解决方案,但我不太擅长编译,也不知道如何静态链接。

我的程序只依赖于SDL2、GLU和OpenGL。我正在使用MinGW (在Windows8.1上)或gcc (在Ubuntu14.04上)编译C++ --这两个操作系统都在本地安装了SDL语言。

这是我目前的makefile,来自我的一位教授给我的一个示例makefile:

代码语言:javascript
复制
# Executable/file name
EXE=experiment

#  MinGW
ifeq "$(OS)" "Windows_NT"
CFLG=-O3 -Wall -DUSEGLEW
LIBS= -lSDL2 -lglu32 -lopengl32
CLEAN=del *.exe *.o *.a
else
#  OSX
ifeq "$(shell uname)" "Darwin"
CFLG=-O3 -Wall -Wno-deprecated-declarations
LIBS=-framework SDL2 -framework OpenGL
#  Linux\Unix\Solaris
else
CFLG=-O3 -Wall
LIBS= `sdl2-config --cflags --libs` -lGLU -lGL -lm
endif
#  OSX\Linux\Unix\Solaris
CLEAN=rm -f $(EXE) *.o *.a
endif

# Dependencies
$(EXE).o: $(EXE).cpp FORCE


.c.o:
    gcc -c -o $@ $(CFLG) $<
.cpp.o:
    g++ -std=c++11 -c -o $@ $(CFLG) $<

#  Link
$(EXE):$(EXE).o
    g++ -std=c++11 -O3 -o $@ $^   $(LIBS)

#  Clean
clean:
    $(CLEAN)

# Force
FORCE:
EN

回答 2

Stack Overflow用户

发布于 2015-08-06 02:28:19

要链接到静态库,您可以指定库文件的路径

gcc -o out_bin your_object_files.o path/to/lib.a -lfoo

或者要求链接器使用带有-Bstatic链接器标志的静态版本。通常,对于其余的库,您会希望将链接重置回动态,例如,对于静态SDL2和GLU,但对于动态GL:

gcc -o out_bin your_object_files -Wl,-Bstatic -lSDL2 -lGLU -Wl,-Bdynamic -lGL

这当然意味着库的静态版本存在于库搜索路径列表中(尽管.a使用.lib作为静态库,但在所有指定的平台上都存在MSVC库)。

然而,您通常根本不想这样做。软件通常要么依赖于某些库(在linux上广泛使用,带有包和依赖项列表),要么随身携带所需的库。您可以只将SDL动态库与您的程序一起分发,并使用LD_LIBRARY_PATH或相对路径加载它。

还请注意,较新的SDL2实现了函数的动态加载,这提供了一种使用用户指定的动态库覆盖SDL的方法,即使静态链接也是如此。

票数 1
EN

Stack Overflow用户

发布于 2015-08-11 03:01:43

它与静态链接没有直接关系。在静态链接时,我必须包含SDL的所有依赖库。事实证明,使用-mwindows会导致控制台通信失败。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31837386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档