GLFW3
Anoche estuve trabajando hasta tarde tratando de construir los paquetes GLFW 3 para Linux desde la fuente. Este proceso me llevó mucho tiempo, alrededor de 3 horas en total, en parte porque no estoy familiarizado con CMake y en parte porque no estaba familiarizado con GLFW.
¡Espero que esta publicación te salve de la dificultad que tuve ayer! Pensé que debería hacer una breve reseña y, con suerte, ahorrarle varias horas de su vida ...
Gracias a "urraka", "b6" y "niklas" en el canal de IRC #glfw, he podido hacer funcionar glfw versión 3.0.1.
Resulta que este no es un proceso trivial (ciertamente no para mí, no soy un experto) ya que no hay mucha documentación en la web sobre glfw3, particularmente sobre cómo configurarlo con CMake.
Se me pidió que dividiera esto en una sección de preguntas y respuestas, así que lo hice, y las partes de respuesta están ahora a continuación.
¿Es usted un mantenedor de GLFW o miembro del equipo de GLFW?
Si alguno de los mantenedores de GLFW3 ve esto, entonces mi mensaje para ellos es por favor agregue una sección de "configuración de GLFW3 en Windows, Mac OS X y Linux" a su sitio web. Es bastante fácil escribir programas con GLFW, ya que la documentación en línea es bastante buena, un escaneo rápido de todas las clases y módulos disponibles y estará listo para comenzar. El ejemplo de un proyecto de prueba presentado aquí también es muy bueno. Los dos problemas principales que encontré fueron, en primer lugar, ¿cómo configuro GLFW3 en mi sistema y, en segundo lugar, cómo puedo construir un proyecto GLFW3? Estas dos cosas quizás no sean lo suficientemente claras para un no experto.
Editar
Eché un breve vistazo hoy (Fecha: 2014-01-14), parece que el sitio web de GLFW ha sufrido grandes cambios desde la última vez que miré y ahora hay una sección sobre la compilación de GLFW y programas de construcción con GLFW, que creo que son nuevos.
Respuestas:
Paso 1: Instalar GLFW 3 en su sistema con CMAKE
Para esta instalación, estaba usando KUbuntu 13.04, 64bit.
El primer paso es descargar la última versión (asumiendo que las versiones en el futuro funcionen de manera similar) desde www.glfw.org , probablemente usando este enlace .
El siguiente paso es extraer el archivo y abrir una terminal.
cd
en el directorio glfw-3.XX y ejecutarlo,cmake -G "Unix Makefiles"
es posible que necesite privilegios elevados, y es posible que también deba instalar las dependencias de compilación primero . Para ello, tratarsudo apt-get build-dep glfw
osudo apt-get build-dep glfw3
o hacerlo de forma manual , como lo hice utilizandosudo apt-get install cmake xorg-dev libglu1-mesa-dev
... Puede haber otras librerías que se requieren, tales como las bibliotecas pthread ... Al parecer les había hecho ya. (Vea las opciones -l dadas a la etapa del enlazador g ++, a continuación).Ahora puede escribir
make
y luegomake install
, lo que probablemente requiera que lo hagasudo
primero.De acuerdo, debería obtener una salida detallada en las últimas tres etapas de CMake, que le indique qué se ha construido o dónde se ha colocado. (En
/usr/include
, por ejemplo.)Paso 2: cree un programa de prueba y compile
El siguiente paso es encender vim ("¿qué ?! ¡¿vim?!", Dices) o tu IDE / editor de texto preferido ... No usé vim, usé Kate, porque estoy en KUbuntu 13.04 ... De todos modos, descargue o copie el programa de prueba desde aquí (en la parte inferior de la página) y guarde, salga.
Ahora compile usando
g++ -std=c++11 -c main.cpp
- no estoy seguro de si se requiere c ++ 11 pero lo usénullptr
, lo necesitaba ... Puede que necesite actualizar su gcc a la versión 4.7, o la próxima versión 4.8 ... Información sobre eso aquí .Luego corrige tus errores si escribiste el programa a mano o trataste de ser "demasiado inteligente" y algo no funcionó ... ¡Entonces vincúlalo usando este monstruo!
g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi
Como puede ver, en la parte "instalar dependencias de compilación", es posible que también desee comprobar que tiene las bibliotecas de desarrollo GL, GLU, X11 Xxf86vm (lo que sea) Xrandr posix-thread y Xi (lo que sea) instaladas también. Quizás actualice sus controladores de gráficos también, creo que GLFW 3 puede requerir OpenGL versión 3 o superior. ¿Quizás alguien pueda confirmar eso? Es posible que también deba agregar las opciones del vinculador-ldl -lXinerama -lXcursor
para que funcione correctamente si obtiene referencias no definidas adlclose
(crédito a @ user2255242).Y, sí, ¡realmente necesitaba tantos
-l
correos electrónicos!Paso 3: ¡Has terminado, que tengas un buen día!
Con suerte, esta información fue correcta y todo funcionó para usted, y disfrutó escribiendo el programa de prueba GLFW. También espero que esta guía ha ayudado, o va a ayudar, unas pocas personas en el futuro que luchaban como lo fue
hoyayer!Por cierto, todas las etiquetas son las cosas que busqué en stackoverflow buscando una respuesta que no existía. (Hasta ahora). Ojalá sean lo que buscaste si estuvieras en una posición similar a la mía.
Nota del autor:
Puede que no sea una buena idea. Este método (usando sudo make install) puede ser peligroso para su sistema. (Consulte No rompa Debian)
Idealmente, yo, o alguien más, debería proponer una solución que no solo instale archivos lib, etc.en los directorios predeterminados del sistema, ya que estos deberían ser administrados por administradores de paquetes como
apt
, y hacerlo puede causar un conflicto y romper su sistema de administración de paquetes.Consulte la nueva "respuesta 2020" para obtener una solución alternativa.
fuente
pow
así que agregar-lm
a las opciones de compilación lo solucionó.sudo apt-get update && sudo apt-get install build-essential libevent-pthreads-2.0.5 doxygen xorg-dev libglu1-mesa-dev
Lo resolví de esta manera
Un archivo pkg-config describe todos los indicadores y dependencias de tiempo de compilación y tiempo de enlace necesarios para usar una biblioteca.
me muestra eso
No sé si todas estas bibliotecas son realmente necesarias para la compilación, pero para mí funciona ...
fuente
Tenga en cuenta que no necesita tantos
-l
correos electrónicos si instala glfw con laBUILD_SHARED_LIBS
opción. (Puede habilitar esta opción ejecutandoccmake
primero).De esta forma
sudo make install
instalará la biblioteca compartida en/usr/local/lib/libglfw.so
. Luego puede compilar el archivo de ejemplo con un simple:Entonces no olvide agregar / usr / local / lib / a la ruta de búsqueda de bibliotecas compartidas antes de ejecutar su programa. Esto se puede hacer usando:
Y puede poner eso en su
~/.bashrc
para no tener que escribirlo todo el tiempo.fuente
ldd
para verificar qué bibliotecas carga un programa cuando se ejecuta. También es una buena forma de comprobar que las bibliotecas se encuentran correctamente. Puede usarldd
en su programa y en /usr/local/lib/libglfw.so para comparar.sudo ldconfig
debería resolver este problema y no requerir la configuración de LD_LIBRARY_PATH cada vez. Esta respuesta proporciona una discusión sobre por qué esto podría ser preferible.Dado que la respuesta aceptada no permite más ediciones, la resumiré con un solo comando copiar y pegar (Reemplace 3.2.1 con la última versión disponible en la primera línea):
Si desea compilar un programa, utilice los siguientes comandos:
Si está siguiendo el tutorial de learnopengl.com, es posible que también deba configurar GLAD. En tal caso, haga clic en este enlace
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
y luego haga clic en el botón "Generar" en la esquina inferior derecha del sitio web y descargue el archivo zip. Extraerlo y compilar las fuentes con el siguiente comando:
Ahora, los comandos para compilar su programa se vuelven así:
fuente
Gran guía, gracias. Dadas la mayoría de las instrucciones aquí, casi se construyó para mí, pero tuve un error restante.
Después de buscar este error, tuve que agregarlo
-ldl
a la línea de comando.Luego, la aplicación de muestra "hola GLFW" se compiló y se vinculó.
Soy bastante nuevo en Linux, así que no estoy completamente seguro de qué hace exactamente esta biblioteca adicional ... aparte de corregir mi error de enlace. Sin embargo, veo ese interruptor de línea cmd en la publicación anterior.
fuente
Si alguien se está volviendo perezoso y tal vez no sepa cómo configurar el shell para todas esas bibliotecas y -l s, entonces creé un script de Python (tienes que tener python3, la mayoría de los usuarios de Linux lo tienen) que te permite compilar fácilmente scripts y ejecutarlos sin preocuparme mucho, solo tiene llamadas regulares al sistema, simplemente organizadas cuidadosamente, lo creé para mí, pero tal vez sería útil: Aquí está
fuente
La respuesta bien descrita ya está ahí, pero pasé por esta receta MÁS CORTA :
$ brew install glfw
cd /home/linuxbrew/.linuxbrew/Cellar/glfw/X.X/include
sudo cp -R GLFW /usr/include
Explicación: Logramos construir GLFW por CMAKE que se hace con Linuxbrew (puerto Linux del amado Homebrew). Luego copie los archivos de encabezado donde Linux lee desde (
/usr/include
).fuente
Respuesta actualizada 2020
Es 2020 (7 años después) y he aprendido más sobre Linux durante este tiempo. Específicamente, puede que no sea una buena idea ejecutarlo
sudo make install
al instalar bibliotecas, ya que pueden interferir con el sistema de administración de paquetes. (En este casoapt
, estoy usando Debian 10.)Si esto no es correcto, corríjame en los comentarios.
Solución alternativa propuesta
Esta información se toma de los documentos GLFW, sin embargo, he ampliado / simplificado la información que es relevante para los usuarios de Linux.
Es posible que deba ejecutar
sudo apt-get build-dep glfw3
antes (?). Ejecuté este comando ysudo apt install xorg-dev
según las instrucciones.Finalmente corre
make
Ahora en el directorio de su proyecto, haga lo siguiente. (Vaya a su proyecto que usa las librerías glfw)
Crea un
CMakeLists.txt
, el mío se ve asíSi no le gusta CMake, le pido disculpas, pero en mi opinión, es la forma más fácil de hacer que su proyecto funcione rápidamente. Recomendaría aprender a usarlo, al menos hasta un nivel básico. Lamentablemente no conozco ningún buen tutorial de CMake
Luego hazlo
cmake .
ymake
, tu proyecto debe estar construido y vinculado con la lib compartida glfw3Hay alguna forma de crear una biblioteca vinculada dinámica. Creo que he usado el método estático aquí. Comente / agregue una sección en esta respuesta a continuación si sabe más que yo
Esto debería funcionar en otros sistemas, si no, avíseme y lo ayudaré si puedo
fuente