Я пытаюсь установить статическую ссылку на 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.

0
Hypnotron 12 Окт 2019 в 18:15

1 ответ

Лучший ответ

Оказывается, PKGBUILD sdl2-hg в AUR переименовал libSDL2.a в libSDL2main.a, отсюда и ошибка libSDL2.a not found. Удаление проблемной строки из PKGBUILD и повторная компиляция SDL2 облегчили проблему.

1
Hypnotron 15 Окт 2019 в 15:56