Referência não definida e uso da biblioteca openGL [RESOLVIDO]

1. Referência não definida e uso da biblioteca openGL [RESOLVIDO]

Lucas jose Pereia de Araujo
LucasJPA

(usa Debian)

Enviado em 18/01/2019 - 18:07h

Boa tarde,
Estou criando um código simples para aprender a usar a openGL, e o código apresenta o erro "referência não definida" para as funções.
#include <GL/glut.h>
#include <iostream>

using namespace std;

#define LARGURA 500
#define ALTURA 500

void inicializa(void)
{
//define a cor da janela como branca
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);

//modo de projeçao ortogonal
glOrtho(0, LARGURA, 0, ALTURA, -1, 1);
}

int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowSize(LARGURA, ALTURA);
glutInitWindowPosition(100, 100);
glutCreateWindow("Janela simples");
inicializa();
glutMainLoop();

return 0;
}


Porque isso acontece e como posso resolver ?
Desde já obrigado.


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 18/01/2019 - 18:38h

A mensagem significa que a implementação de um ou mais símbolos (funções ou variáveis globais) que você usa no seu programa não foi encontrada. Provavelmente porque você não instruiu o linker a usar a biblioteca que tem essa implementação.

Note que quando você coloca diretivas “#include” no seu código-fonte, você apenas dá ao compilador as declarações dos símbolos, ou seja, quais são seus nomes e que tipos eles têm. Em muitos casos, a implementação reside numa entidade (geralmente num arquivo) à parte, que não é usado diretamente pelo compilador (que é o programa que começa a converter seu código-fonte em código-objeto, mas esse código-objeto ainda não tem a forma final de programa executável), mas apenas pelo linker (uma etapa que vem depois da compilação, e que normalmente é uma das últimas na geração do executável).


Quando você chama o gcc ou g++ com um programa simples com apenas um arquivo fonte, ele geralmente se encarrega de fazer todas etapas de produção do executável, cuidando de invocar automaticamente o linker (que é um programa cujo nome é ld) após concluir a compilação (geralmente usando arquivos temporários que a gente nem consegue ver). Se você não especificar nada, ele geralmente inclui apenas um conjunto reduzido de bibliotecas muito comuns na hora em que chama o ld, e esse conjunto seguramente não inclui as bibliotecas do OpenGL e GLUT, de modo que você tem de as incluir manualmente.

Assim, se você estava compilando seu programa com algo como “g++ prog.cc”, deve passar a usar algo como “g++ prog.cc -lglut -lGL” (que, por sinal, foi exatamente o que eu fiz na minha máquina para conseguir compilar o código que você postou).


... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)





Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts