linux build install cmake glfw

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



build install (5)

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 programas 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 here 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 compilar GLFW y programas 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 www.glfw.org, probablemente utilizando este link .

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 compilació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 programa de prueba y compila

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 programa de prueba desde here (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 here .

Luego corrige tus errores si escribiste el programa 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 compilació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 -lXinerama -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 programa 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 etiquetas son las cosas que busqué en 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.


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 compilar un programa, 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 -lXinerama -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 fuentes con el siguiente comando:

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

Ahora, los comandos para compilar tu programa 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 -lXinerama -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.c.o): 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 -lXinerama -lXi -lXxf86vm -lXcursor -lGL -lpthread -ldl

Luego, la aplicación de ejemplo "hello GLFW" compilada 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.


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 compilar 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 programa. 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 compilació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 -lXinerama -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 compilar, pero para mí funciona ...