2012-05-08 40 views
11

Esta es la primera vez que trato de compilar el código FORTRAN utilizando un archivo MAKE. El sistema operativo es Ubuntu 12.04 LTS 64 bit. Me encontré con los siguientes errores:"/ usr/bin/ld: no se puede encontrar la biblioteca"

gfortran -o przm3123.exe canopy.o chem.o cnfuns.o cropdate.o datemod.o debug.o debug_cn.o f2kcli.o floatcmp.o furrow.o general.o i_errchk.o infnan.o inivar.o ioluns.o iosubs.o lambertw.o m_readvars.o utils.o wind.o fcscnc.o przm3.o rsexec.o rsinp1.o rsinp2.o rsinp3.o rsmcar.o rsmisc.o rsprz1.o rsprz2.o rsprz3.o rsprzn.o rsutil.o rsvado.o -L ../libanne4.0/lib -lwdm -ladwdm -lutil 
/usr/bin/ld: cannot find -lwdm 
/usr/bin/ld: cannot find -ladwdm 
collect2: ld returned 1 exit status 
make: *** [przm3123.exe] Error 1 

El elemento clave en el makefile es:

przm2_LIBS = -L ../libanne4.0/lib -lwdm -ladwdm -lutil 

¿Hay algo que pueda hacer para corregir este error? ¿Debería probar otros compiladores?

+3

Lo primero que comprobaría es si realmente tiene 'libwdm.so' y' libadwdm.so'. Supongo que deberían estar en este directorio 'libanne4.0/lib'. – birryree

+0

Sí, 'libwdm.a' y' libadwdm.a' están ahí. –

+0

Oh, bibliotecas estáticas. ¿Puedes probar esto en tu archivo MAKE? 'przm2_LIBS = -L ../ libanne4.0/lib -Wl, -Bdynamic -lutil -Wl, -Bstatic -lwdm -ladwdm' - Supongo que' util' es 'libutil.so' (una biblioteca compartida) ya que no No te quejes de eso. – birryree

Respuesta

10

Como ../libanne4.0/lib es una ruta relativa, puede intentar cambiarla a una ruta absoluta.

También podría verificar si el proceso del enlazador tiene los derechos para acceder y leer las librerías.


Actualización: Para que el enlazador encuentra una biblioteca especifica usando la opción -l<name> el nombre de la librería del será lib<name>.[a|so] y el parámetro a -L debe señalar el camino fuera de la biblioteca se encuentra.

-L tiene que ser anterior -l opción (es).

Se podría especificar -l y/o -L varias veces.

+1

Proporcionó la ruta absoluta, pero el mismo error. Intenté 'ld adwdmlib.a' y obtuve los siguientes errores:' ld: advertencia: no se puede encontrar el símbolo de entrada _start; no estableciendo start address' gracias –

+1

¿Qué es 'adwdmlib.a'? – alk

+1

adwdmlib.a es una biblioteca que necesito incluir. Basado en la regla L y I que usted menciona. ¿Eso quiere decir que 'przm2_LIBS = -L ../libanne4.0/lib -lwdm -ladwdm -lutil' no funciona porque el nombre de esas libs no es correcto? –

1

Hay algo mal con el nombre "adwdmlib.a". Una bandera de enlace "-l adwdm" le dirá al compilador que espere un archivo lib con el nombre "libadwdm.a", no "adwdmlib.a". ¿Esto es útil o relevante? Si el nombre de su biblioteca es "adwdmlib.a", es probable que su enlazador no pueda encontrarlo.

+0

Gracias por el comentario. Traté de cambiar el nombre de esas librerías, pero el enlazador aún no pudo encontrarlas. –

Cuestiones relacionadas