GCC, enlazando bibliotecas, ¿no se encuentra?

  • SO: Windows 7 Pro X64
  • IDE: Eclipse IDE para desarrolladores de C / C ++
  • Comstackdor: MinGW (último, 4.5.2)

La comstackción de HelloWorld.c funciona; pero cuando bash agregar algunas bibliotecas externas se atraganta.

Agregué los archivos .a y .dll a mis ‘Bibliotecas’; agrega la ruta de acceso tanto a PATH como a Library Path. También puse los archivos de inclusión y configuré la inclusión. Se dice que las bibliotecas que tengo son compatibles con win / mingw. También tienen una descarga diferente para MSVC que funciona.

Frustrante. El ld.exe proporciona la ruta completa y, obviamente, allí y tengo permisos para leerlos y escribirlos. También los incluí sin ruta (están en la ruta de la biblioteca y la ruta).

No entiendo por qué esto no funciona.

c: / mingw / bin /../ lib / gcc / mingw32 / 4.5.2 /../../../../ mingw32 / bin / ld.exe: no puedo encontrar -lC: \ rhino \ data \ lib \ glfw.dll c: / mingw / bin /../ lib / gcc / mingw32 / 4.5.2 /../../../../ mingw32 / bin / ld.exe: no se puede encontrar -lC: \ rhino \ data \ lib \ libglfwdll.ac: / mingw / bin /../ lib / gcc / mingw32 / 4.5.2 /../../../../ mingw32 / bin / ld.exe: no se puede encuentra -lC: \ rhino \ data \ lib \ libglfw.a

C:\Users\rhino>dir C:\rhino\data\lib\libglfw.a 04/15/2011 05:24 PM 70,384 libglfw.a 

Actualizado:

Incluso los he agregado a mi ruta C: \ MinGW \ lib y aún no puedo encontrarlos.

Michael Burr señaló la forma correcta de hacer referencia a las bibliotecas en la línea de comandos. La ruta de acceso a la biblioteca se proporciona con el -L , y el nombre de la biblioteca con el -l (el nombre de la biblioteca es el nombre del archivo, sin la parte de lib al principio, y el sufijo .a en la fin).

Una cosa más a destacar es que está tratando de vincular tanto a la versión estática (libglfw.a) como a la dinámica (glfw.dll) de la biblioteca, ambas incluidas en la descarga, al mismo tiempo. En su lugar, debe elegir uno, según sus necesidades / deseos, y solo vincularlo a ese.

Vincular contra la versión estática es sencillo. Solo agrega -lglfw a la línea de comando.

Para usar la biblioteca dinámica, debe enlazar con la biblioteca de importación para la dll ( libglfwdll.a ), mediante el uso del interruptor -lglfwdll , y omitir la propia dll desde el comando de enlace. Básicamente, la biblioteca de importación no contiene ningún código de objeto, sino solo definiciones; el código real está en la dll. La dll se vinculará dinámicamente en tiempo de ejecución. (Para que esto funcione, el sistema debe poder encontrar la dll; es decir, tiene que estar en el directorio de trabajo actual, en un directorio que se encuentra en la ruta de acceso, o su directorio debe agregarse a una variable de entorno especial utilizada para esto, pero para que esto sea importante, primero tienes que tener éxito en la construcción del ejecutable.)

Mi experiencia (que no incluye cómo podría configurarse esto en Eclipse) es que ld (que gcc invocará) desea los nombres de lib sin el prefijo lib o la extensión .a . Tratar:

 gcc -LC:\rhino\data\libs -LC:\rhino\data\lib -oTestC.exe TestC.o -lglfw -lglfwdll 

No estoy seguro de que el archivo glfw.dll deba aparecer como una biblioteca; la biblioteca de importación para esa DLL (supongo que es libglfwdll.lib) debería encargarse de enlazar a la DLL.

Prueba esto:

 gcc -LC:\rhino\data\libs -LC:\rhino\data\lib -oTestC.exe TestC.o -lglfw libglfw.a libglfwdll.a