Я пытаюсь установить статическую ссылку на SDL2 в Arch Linux, чтобы создать единый кроссплатформенный исполняемый файл для игры. Заголовки 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
.
1 ответ
Оказывается, PKGBUILD sdl2-hg в AUR переименовал libSDL2.a
в libSDL2main.a
, отсюда и ошибка libSDL2.a not found
. Удаление проблемной строки из PKGBUILD и повторная компиляция SDL2 облегчили проблему.
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .