Não é possível compilar o programa que usa o SDL após a atualização para 11.10 - referência indefinida para SDL_Init

6

Acabei de atualizar de 11.4 para 11.10 e pelo menos uma coisa parece estar quebrada: Eu tenho um programa C ++ que está usando SDL e OpenGL. Eu era capaz de compilar e executá-lo muito bem antes da atualização. Agora eu recebo erros de linker, por exemplo

undefined reference to 'SDL_Init'

Eu tenho libsdl1.2debian e libsdl1.2-dev pacotes instalados, acredito que é tudo que preciso (mas posso estar errado). Eu compilo o programa assim:

gcc -I /usr/include/SDL -lSDL -o test test.cpp

Alguma ideia do que pode estar causando isso?

    
por adam 18.10.2011 / 22:52

4 respostas

14

Ok, resolvido. Aparentemente, por algum motivo misterioso, a ordem das opções do gcc agora é importante. Então, quando eu faço:

gcc -I /usr/include/SDL -o test test.cpp -lSDL

(moveu a opção -lSDL para o final) tudo funciona bem. Eu adoraria saber por que isso de repente importa, quando antes se não, mas por enquanto estou feliz que as coisas funcionem novamente.

    
por adam 19.10.2011 / 12:36
1

Para o Eclipse: tenho o mesmo problema, mas resolvo.

  • Selecionar projeto
  • Projeto > Propriedades
  • C / C ++ Build > Configurações - Configurações da ferramenta > Compilador GCC C - Incluir caminhos (-l) > "/ usr / include / SDL"
  • C / C ++ Build > Configurações - Configurações de ferramentas > GCC C Linker - Bibliotecas (-l) > "SDL"
  • Aplicar

... então construa o projeto e execute ...

    
por user46917 18.02.2012 / 10:30
0

Um simples GNU Makefile para um projeto que usa SDL:

CXXFLAGS:=(shell pkg-config --cflags sdl2) $(CXXFLAGS)
LDLIBS:=$(shell pkg-config --libs sdl2) $(LDLIBS)

all: test

Em que um arquivo test.cpp existe no mesmo diretório que o Makefile .

(Observe que usei sdl2 em vez de sdl , já que o SDL 1.2 está basicamente morto agora.)

O GNU make magicamente irá descobrir o comando para chamar g++ .

    
por Jonathan Baldwin 24.12.2013 / 06:11
0

No meu caso, eu estava usando G + + e não funcionou, e mudar para o GCC funciona. Eu estou escrevendo em C.

Usando Code :: Blocks, o sinalizador da biblioteca é -lSDL2

    
por Yan King Yin 21.08.2015 / 06:43

Tags