不能 link SDL2 静态
Cannot link SDL2 statically
我正在尝试在 Arch Linux 上静态地 link 到 SDL2,以便为游戏生成单一的跨平台可执行文件。 SDL2 头文件安装在 /usr/include/SDL2 中,库安装在 /usr/lib 中。使用 g++ -I/usr/include/SDL2 -lSDL2 hello.cpp
进行动态编译是可行的,因为 ./a.out 会生成一个空白 window,但我无法将 SDL2 link 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
returns/usr/bin/ld: cannot find -lSDL2
,而g++ -I/usr/include/SDL2 -l:libSDL2 hello.cpp
returns/usr/bin/ld: cannot find -l:libSDL2
.
事实证明,AUR 中 sdl2-hg 的 PKGBUILD 正在将 libSDL2.a
重命名为 libSDL2main.a
,因此出现 libSDL2.a not found
错误。从 PKGBUILD 中删除有问题的行并重新编译 SDL2 缓解了这个问题。
我正在尝试在 Arch Linux 上静态地 link 到 SDL2,以便为游戏生成单一的跨平台可执行文件。 SDL2 头文件安装在 /usr/include/SDL2 中,库安装在 /usr/lib 中。使用 g++ -I/usr/include/SDL2 -lSDL2 hello.cpp
进行动态编译是可行的,因为 ./a.out 会生成一个空白 window,但我无法将 SDL2 link 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
returns/usr/bin/ld: cannot find -lSDL2
,而g++ -I/usr/include/SDL2 -l:libSDL2 hello.cpp
returns/usr/bin/ld: cannot find -l:libSDL2
.
事实证明,AUR 中 sdl2-hg 的 PKGBUILD 正在将 libSDL2.a
重命名为 libSDL2main.a
,因此出现 libSDL2.a not found
错误。从 PKGBUILD 中删除有问题的行并重新编译 SDL2 缓解了这个问题。