GLFW3
Ontem à noite eu estava trabalhando até tarde tentando construir os pacotes GLFW 3 para Linux a partir do código-fonte. Esse processo me levou muito tempo, cerca de 3 horas no total, em parte porque não estou familiarizado com o CMake e em parte porque não estava familiarizado com o GLFW.
Espero que este post te livre da dificuldade que tive ontem! Achei que deveria fazer um pequeno artigo e, espero, poupar várias horas de sua vida ...
Graças a "urraka", "b6" e "niklas" no canal IRC #glfw, consegui fazer o glfw versão 3.0.1 funcionar.
Acontece que este não é um processo trivial (certamente não para mim, eu não sou especialista), pois não há muita documentação na web sobre glfw3, particularmente sobre como configurá-lo com o CMake.
Pediram-me para dividir isso em uma seção de perguntas e respostas e, portanto, fiz isso, e as partes das respostas estão agora abaixo.
Você é mantenedor do GLFW ou membro da equipe do GLFW?
Se algum dos mantenedores do GLFW3 vir isso, minha mensagem para eles é: adicione uma seção "Configurando o GLFW3 no Windows, Mac OS X e Linux" ao seu site! É muito fácil escrever programas com GLFW, já que a documentação online é muito boa, uma varredura rápida de todas as classes e módulos disponíveis e você estará pronto para começar. O exemplo de um projeto de teste apresentado aqui também é muito bom. Os dois principais problemas que encontrei foram, primeiro como faço para configurar o GLFW3 no meu sistema e, segundo, como construir um projeto GLFW3? Essas duas coisas talvez não sejam claras o suficiente para um não especialista.
Editar
Dando uma olhada rápida hoje (Data: 2014-01-14), parece que o site do GLFW passou por grandes mudanças desde a última vez que olhei e agora há uma seção sobre compilar o GLFW e construir programas com o GLFW, que eu acho que são novos.
Respostas:
Etapa 1: Instalando o GLFW 3 em seu sistema com CMAKE
Para esta instalação, usei o KUbuntu 13.04, 64bit.
O primeiro passo é fazer o download da versão mais recente (presumindo que as versões futuras funcionem de maneira semelhante) de www.glfw.org , provavelmente usando este link .
A próxima etapa é extrair o arquivo e abrir um terminal.
cd
no diretório glfw-3.XX e executecmake -G "Unix Makefiles"
você pode precisar de privilégios elevados, e você também pode precisar instalar dependências de compilação primeiro . Para fazer isso, tentesudo apt-get build-dep glfw
ousudo apt-get build-dep glfw3
ou faça manualmente , como fiz usandosudo apt-get install cmake xorg-dev libglu1-mesa-dev
... Pode haver outras libs que você precise, como as bibliotecas pthread ... Aparentemente, eu já as tinha. (Consulte as opções -l fornecidas para o estágio do vinculador g ++, abaixo.)Agora você pode digitar
make
e entãomake install
, o que provavelmente exigirá que vocêsudo
primeiro.Ok, você deve obter alguma saída detalhada nos últimos três estágios do CMake, informando o que foi construído ou onde foi colocado. (Em
/usr/include
, por exemplo.)Etapa 2: criar um programa de teste e compilar
O próximo passo é iniciar o vim ("o quê ?! vim ?!" você diz) ou seu IDE / editor de texto preferido ... Eu não usei o vim, usei o Kate, porque estou no KUbuntu 13.04 ... De qualquer forma, baixe ou copie o programa de teste daqui (no rodapé da página) e salve, saia.
Agora compile usando
g++ -std=c++11 -c main.cpp
- não tenho certeza se c ++ 11 é necessário, mas eu useinullptr
, eu precisava ... Você pode precisar atualizar seu gcc para a versão 4.7 ou a próxima versão 4.8 ... Informações sobre isso aqui .Então corrija seus erros se você digitou o programa manualmente ou tentou ser "muito inteligente" e algo não funcionou ... Então faça um link usando este monstro!
g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi
Então você vê, na parte "instalar dependências de compilação", você também pode querer verificar se tem as bibliotecas de desenvolvimento GL, GLU, X11 Xxf86vm (seja lá o que for) Xrandr posix-thread e Xi (seja lá o que for) instaladas também. Talvez atualize seus drivers gráficos também, eu acho que GLFW 3 pode exigir OpenGL versão 3 ou superior? Talvez alguém possa confirmar isso? Você também pode precisar adicionar as opções de vinculador-ldl -lXinerama -lXcursor
para fazê-lo funcionar corretamente se você estiver recebendo referências indefinidas paradlclose
(crédito para @ user2255242).E, sim, eu realmente precisava de tantos
-l
s!Passo 3: Você terminou, tenha um bom dia!
Esperançosamente, esta informação estava correta e tudo funcionou para você, e você gostou de escrever o programa de teste GLFW. Também espero que este guia tenha ajudado ou vai ajudar, algumas pessoas no futuro que estavam lutando como eu estava
hojeontem!A propósito, todas as tags são as coisas que pesquisei no stackoverflow em busca de uma resposta que não existia. (Até agora). Com sorte, eles são o que você procurava se estivesse em uma posição semelhante à minha.
Nota do autor:
Isso pode não ser uma boa ideia. Este método (usando sudo make install) pode ser prejudicial ao seu sistema. (Veja Don't Break Debian)
O ideal é que eu, ou outra pessoa, proponha uma solução que não instale apenas arquivos lib etc nos diretórios padrão do sistema, já que eles devem ser gerenciados por gerenciadores de pacotes como
apt
, e fazer isso pode causar um conflito e quebrar seu sistema de gerenciamento de pacotes.Veja a nova "resposta para 2020" para uma solução alternativa.
fonte
pow
então adicionar-lm
opções de compilação corrigiu isso.sudo apt-get update && sudo apt-get install build-essential libevent-pthreads-2.0.5 doxygen xorg-dev libglu1-mesa-dev
Eu resolvi dessa forma
Um arquivo pkg-config descreve todos os sinalizadores de tempo de compilação e tempo de link e dependências necessárias para usar uma biblioteca.
me mostra isso
Não sei se todas essas libs são realmente necessárias para compilar, mas para mim funciona ...
fonte
Observe que você não precisa de tantos
-l
s se instalar o glfw com aBUILD_SHARED_LIBS
opção. (Você pode habilitar esta opção executandoccmake
primeiro).Desta forma,
sudo make install
irá instalar a biblioteca compartilhada no/usr/local/lib/libglfw.so
. Você pode então compilar o arquivo de exemplo com um simples:Então não se esqueça de adicionar / usr / local / lib / ao caminho de busca por bibliotecas compartilhadas antes de executar seu programa. Isso pode ser feito usando:
E você pode colocar isso no seu
~/.bashrc
para não ter que digitar o tempo todo.fonte
ldd
para verificar quais bibliotecas são carregadas por um programa quando ele é executado. Também é uma boa maneira de verificar se as bibliotecas foram encontradas corretamente. Você pode usarldd
em seu programa e em /usr/local/lib/libglfw.so para comparar.sudo ldconfig
deve resolver este problema, e não requer que LD_LIBRARY_PATH seja configurado toda vez. Esta resposta fornece uma discussão sobre por que isso pode ser preferido.Como a resposta aceita não permite mais edições, vou resumi-la com um único comando de copiar e colar (substitua 3.2.1 pela versão mais recente disponível na primeira linha):
Se você deseja compilar um programa, use os seguintes comandos:
Se você estiver seguindo o tutorial learnopengl.com, pode ser necessário configurar o GLAD também. Nesse caso, clique neste link
http://glad.dav1d.de/#profile=core&specification=gl&api=gl%3D3.3&api=gles1%3Dnone&api=gles2%3Dnone&api=glsc2%3Dnone&language=c&loader=on
e então clique no botão "Gerar" no canto inferior direito do site e baixe o arquivo zip. Extraia-o e compile as fontes com o seguinte comando:
Agora, os comandos para compilar seu programa ficam assim:
fonte
Grande guia, obrigado. Com a maioria das instruções aqui, ele quase foi criado para mim, mas ainda havia um erro.
Depois de pesquisar esse erro, tive que adicionar
-ldl
à linha de comando.Em seguida, o aplicativo de amostra "hello GLFW" compilado e vinculado.
Eu sou muito novo no Linux, então não estou completamente certo do que exatamente esta biblioteca extra faz ... além de corrigir meu erro de link. No entanto, vejo essa mudança de linha cmd na postagem acima.
fonte
Se alguém está ficando preguiçoso e talvez não saiba como configurar o shell para todas as bibliotecas e -l s, criei um script python (você precisa ter o python3, a maioria dos usuários de linux tem.) Que permite compilar facilmente scripts e executá-los sem me preocupar muito, ele só tem chamadas de sistema regulares, apenas organizadas de forma organizada, eu criei para mim mesmo, mas talvez seja útil: Aqui está
fonte
A resposta bem descrita já está aí, mas passei por esta receita MAIS CURTA :
$ brew install glfw
cd /home/linuxbrew/.linuxbrew/Cellar/glfw/X.X/include
sudo cp -R GLFW /usr/include
Explicação: Conseguimos construir o GLFW pelo CMAKE, que é feito pelo Linuxbrew (porta Linux do amado Homebrew). Em seguida, copie os arquivos de cabeçalho para onde o Linux lê (
/usr/include
).fonte
Resposta atualizada de 2020
É 2020 (7 anos depois) e aprendi mais sobre Linux durante esse tempo. Especificamente, pode não ser uma boa ideia executar
sudo make install
durante a instalação de bibliotecas, pois elas podem interferir no sistema de gerenciamento de pacotes. (Neste caso,apt
como estou usando o Debian 10.)Se isso não estiver correto, corrija-me nos comentários.
Solução alternativa proposta
Essas informações são retiradas dos documentos do GLFW, no entanto, expandi / simplifiquei as informações que são relevantes para os usuários Linux.
Pode ser necessário executar
sudo apt-get build-dep glfw3
antes (?). Executei este comando e desudo apt install xorg-dev
acordo com as instruções.Finalmente corra
make
Agora, no diretório do seu projeto, faça o seguinte. (Vá para o seu projeto que usa as libs glfw)
Crie um
CMakeLists.txt
, o meu é assimSe você não gosta do CMake, peço desculpas, mas na minha opinião é a maneira mais fácil de fazer seu projeto funcionar rapidamente. Eu recomendaria aprender a usá-lo, pelo menos em um nível básico. Infelizmente, não conheço nenhum bom tutorial CMake
Então faça
cmake .
emake
, seu projeto deve ser construído e vinculado à biblioteca compartilhada glfw3Existe alguma maneira de criar uma biblioteca vinculada dinâmica. Acredito ter usado o método estático aqui. Por favor, comente / adicione uma seção nesta resposta abaixo se você souber mais do que eu
Isso deve funcionar em outros sistemas, se não, avise-me e ajudarei se for capaz de
fonte