Cómo construir e instalar GLFW 3 y usarlo en un proyecto de Linux

GLFW3

Anoche trabajé tarde intentando construir los paquetes GLFW 3 para Linux desde la fuente. Este proceso me llevó mucho tiempo, unas 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 escribir un breve reportaje y, con suerte, ahorrarle varias horas de tu vida …

Gracias a “urraka”, “b6” y “niklas” en el canal IRC #glfw, he podido obtener la versión 3.0.1 trabajando.

Resulta que este no es un proceso trivial (ciertamente no es para mí, no soy un experto) ya que no hay mucha documentación en la web sobre glfw3, particularmente sobre la configuración con CMake.

Me pidieron que dividiera esto en una sección de preguntas y respuestas, y así lo hice, y las partes de respuestas están ahora debajo.

¿Eres un mantenedor de GLFW o un miembro del equipo de GLFW?

Si alguno de los mantenedores de GLFW3 lo ve, entonces mi mensaje para ellos es que agreguen una sección “configuración de GLFW3 en Windows, Mac OS X y Linux” a su sitio web. Es bastante fácil escribir progtwigs con GLFW, ya que la documentación en línea es bastante buena, una exploración rápida 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 principales problemas que encontré fueron, primero, ¿cómo configuro GLFW3 en mi sistema y, en segundo lugar, cómo construir un proyecto GLFW3? Estas dos cosas quizás no son lo suficientemente claras para un no experto.

Editar

Lo miré brevemente (Fecha: 2014-01-14) Parece que el sitio web de GLFW ha sufrido grandes cambios desde la última vez que lo busqué y ahora hay una sección sobre cómo comstackr GLFW y progtwigs de construcción con GLFW, que creo que son nuevos.

Paso 1: instalar GLFW 3 en su sistema con CMAKE

Para esta instalación, estaba usando KUbuntu 13.04, 64 bits.

El primer paso es descargar la última versión (asumiendo las versiones del trabajo futuro de manera similar) desde http://www.glfw.org, probablemente utilizando este enlace .

El siguiente paso es extraer el archivo y abrir una terminal. cd en el directorio glfw-3.XX y ejecute cmake -G "Unix Makefiles" es posible que necesite privilegios elevados, y es posible que también necesite instalar dependencias de comstackción primero . Para hacer esto, pruebe sudo apt-get build-dep glfw o sudo apt-get build-dep glfw3 o hágalo manualmente , como hice con sudo apt-get install cmake xorg-dev libglu1-mesa-dev … Puede ser otras librerías que requiera, como las bibliotecas pthread … Al parecer las tenía ya. (Consulte las opciones -l dadas a la etapa del enlazador g ++, a continuación).

Ahora puede escribir make y luego make install , lo que probablemente requerirá que sudo primero.

De acuerdo, debería obtener una salida detallada en las últimas tres etapas de CMake, que le diga qué se ha construido o dónde se ha colocado. (En /usr/include , por ejemplo)

Paso 2: crea un progtwig de prueba y comstack

El siguiente paso es activar vim (“¿qué? ¡¡Vim ?!” dices) o tu editor de IDE / texto preferido … No usé vim, utilicé Kate, porque estoy en KUbuntu 13.04 … De todos modos, descargue o copie el progtwig 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 utilicé nullptr entonces, 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 progtwig a mano o trataste de ser “demasiado inteligente” y algo no funcionó … ¡Entonces únelo usando este monstruo! g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi puede ver, en la parte “instalar dependencias de comstackción”, es posible que también quiera comprobar que tiene GL, GLU , X11 Xxf86vm (sea lo que sea) Xrandr posix-thread y Xi (lo que sea que eso sea) bibliotecas de desarrollo instaladas también. Tal vez actualice también sus controladores de gráficos, ¿creo que GLFW 3 puede requerir OpenGL versión 3 o superior? Tal vez alguien puede confirmar eso? Es posible que también necesite agregar las opciones del vinculador -ldl -lXinetwig -lXcursor para que funcione correctamente si obtiene referencias no definidas para dlclose (crédito a @ usuario2255242).

Y, sí, realmente necesitaba tantos … ¡s!

Paso 3: ¡has terminado, ten un buen día!

Afortunadamente esta información era correcta y todo le funcionó, y disfrutó escribiendo el progtwig de prueba GLFW. ¡También espero que esta guía haya ayudado, o ayudará, a algunas personas en el futuro que estaban luchando como lo estaba ayer ayer!

Por cierto, todas las tags son las cosas que busqué en stackoverflow buscando una respuesta que no existía. (Hasta ahora.) Esperemos que sean lo que buscaste si estuvieras en una posición similar a la mía.

Tenga en cuenta que no necesita tantos -l si instala glfw con la opción BUILD_SHARED_LIBS . (Puede habilitar esta opción ejecutando ccmake primero).
De esta manera, sudo make install instalará la biblioteca compartida en /usr/local/lib/ligglfw.so . A continuación, puede comstackr el archivo de ejemplo con un simple:

 g++ main.cpp -L /usr/local/lib/ -lglfw 

Entonces no olvide agregar / usr / local / lib / a la ruta de búsqueda para bibliotecas compartidas antes de ejecutar su progtwig. Esto se puede hacer usando:

 export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} 

Y puede poner eso en su ~ / .bashrc para que no tenga que escribirlo todo el tiempo.

Lo solucioné de esta manera

Un archivo pkg-config describe todas las banderas y dependencias necesarias en tiempo de comstackción y tiempo de enlace necesarias para usar una biblioteca.

 pkg-config --static --libs glfw3 

me muestra eso

 -L/usr/local/lib -lglfw3 -lrt -lXrandr -lXinetwig -lXi -lXcursor -lGL -lm -ldl -lXrender -ldrm -lXdamage -lX11-xcb -lxcb-glx -lxcb-dri2 -lxcb-dri3 -lxcb-present -lxcb-sync -lxshmfence -lXxf86vm -lXfixes -lXext -lX11 -lpthread -lxcb -lXau -lXdmcp 

No sé si todas estas librerías son realmente necesarias para comstackr, pero para mí funciona …

Como la respuesta aceptada no permite más ediciones, voy a resumirla con un solo comando copiar y pegar (Reemplazar 3.2.1 con la última versión disponible en el primer comando):

 version="3.2.1" && \ wget "https://github.com/glfw/glfw/releases/download/${version}/glfw-${version}.zip" && \ unzip glfw-${version}.zip && \ cd glfw-${version} && \ sudo apt-get install cmake xorg-dev libglu1-mesa-dev && \ sudo cmake -G "Unix Makefiles" && \ sudo make && \ sudo make install 

Si desea comstackr un progtwig, use los siguientes comandos:

 g++ -std=c++11 -c main.cpp && \ g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinetwig -lXcursor 

Si sigues el tutorial de learnopengl.com, quizás tengas que configurar también 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. Extraiga y compile las fonts con el siguiente comando:

 g++ glad/src/glad.c -c -Iglad/include 

Ahora, los comandos para comstackr tu progtwig son así:

 g++ -std=c++11 -c main.cpp -Iglad/include && \ g++ main.o glad.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinetwig -lXcursor 

Gran guía, gracias. Dada la mayoría de las instrucciones aquí, casi se construyó para mí, pero tuve un error restante.

 /usr/bin/ld: //usr/local/lib/libglfw3.a(glx_context.co): undefined reference to symbol 'dlclose@@GLIBC_2.2.5' //lib/x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status 

Después de buscar este error, tuve que agregar -ldl a la línea de comando.

 g++ main.cpp -lglfw3 -lX11 -lXrandr -lXinetwig -lXi -lXxf86vm -lXcursor -lGL -lpthread -ldl 

Luego, la aplicación de ejemplo “hello GLFW” comstackda y enlazada.

Soy bastante nuevo en Linux, así que no estoy completamente seguro de qué es exactamente lo que hace esta biblioteca extra … aparte de corregir mi error de enlace. Sin embargo, sí veo ese interruptor de línea cmd en la publicación anterior.

Si alguien se está volviendo perezoso y quizás no sabe cómo configurar el shell para todas esas bibliotecas y -l s, entonces creé un script de python (debe tener python3, la mayoría de los usuarios de Linux lo tienen) que le permite comstackr fácilmente secuencias de comandos y ejecutarlos sin preocuparse mucho, solo tiene llamadas regulares al sistema, simplemente arreglado ordenadamente, lo creé para mí, pero tal vez sería útil: Aquí está