【发布时间】:2020-02-09 19:49:29
【问题描述】:
我正在尝试在 Arch Linux 上静态链接到 SDL2,以便为游戏生成单一的跨平台可执行文件。 SDL2 头文件安装在 /usr/include/SDL2 中,库安装在 /usr/lib 中。使用g++ -I/usr/include/SDL2 -lSDL2 hello.cpp 动态编译可以工作,因为 ./a.out 会产生一个空白窗口,但我无法将 SDL2 静态链接到可执行文件。
hello.cpp的内容:
#include <iostream>
#include "SDL.h"
int main() {
bool quit{false};
SDL_Event inputEvent;
SDL_Init(SDL_INIT_VIDEO);
SDL_Window* window = SDL_CreateWindow("Hello", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 1280, 1280, 0);
while (!quit) {
SDL_WaitEvent(&inputEvent);
switch (inputEvent.type) {
case SDL_QUIT:
quit = true;
break;
}
}
SDL_Quit();
std::cout << "Bye!";
return 0;
}
g++ -I/usr/include/SDL2 -static -lSDL2 hello.cpp 返回/usr/bin/ld: cannot find -lSDL2,而g++ -I/usr/include/SDL2 -l:libSDL2 hello.cpp 返回/usr/bin/ld: cannot find -l:libSDL2。
【问题讨论】:
-
请注意,一旦您静态链接而不是动态链接,关于许可证(特别是 LGPL 和 GPL)的事情(法律上)会发生变化。
-
SDL2 与 SDL 1.x 不同,它是 zlib 许可的,所以应该允许静态链接,对吧?
-
也许吧。我不是律师,也不会在电视上播放。我只是说您链接的方式可能会改变法律规定。没有别的了。
-
你从来没有提到你的
libSDL2.a放在哪里。 (一些一般信息以防万一 -.so库用于动态链接,.a是静态档案;ld 说它找不到请求的库,有什么理由认为它应该?)