Author Topic: como linkar funcion y libreria ??  (Read 2566 times)

vale_N

  • Newbie
  • *
  • Posts: 20
  • Karma: 0
    • View Profile
como linkar funcion y libreria ??
« on: Febrero 12, 2014, 03:23:17 am »
Buenas! Estoy tratando de compilar un programa que tira de dos librerias libpng y libgd, el caso es que ejecuto esto:
Code: [Select]
g++ -O3 -DNDEBUG -W -pipe -Wundef -Winline --param large-function-growth=100000 -Wall EncapsulatedPostScript.o PlotRNA.o SStruct.o Utilities.o -lm -lgd -L/path-to-library/ -lpng16 -L/path-to-library/ -o plot_rna

Y me muestra el siguiente error
Code: [Select]
undefined reference PlotRNA.cpp:(.text+0x223b): undefined reference to `gdImagePng'

Con un grep he buscado esa funcion, es decir,
Code: [Select]
grep gdImagePng /path-to-library/libgd.so

Pero la respues es esta
Code: [Select]
Coincidencia en el fichero binario libgd-2.1.0/src/.libs/libgd.so

Y ya no se por donde seguir....Alguna idea?

Saludos y gracias!

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5473
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: como linkar funcion y libreria ??
« Reply #1 on: Febrero 12, 2014, 04:57:34 am »
Hola:

El orden de las librerías es importante. Pon tu fichero .o detrás de las librerías -l

Se bueno.
« Last Edit: Febrero 12, 2014, 05:03:30 am by chuidiang »

vale_N

  • Newbie
  • *
  • Posts: 20
  • Karma: 0
    • View Profile
Re: como linkar funcion y libreria ??
« Reply #2 on: Febrero 12, 2014, 05:51:11 pm »
Ok, he probado con esto

Code: [Select]
g++ -O3 -DNDEBUG -W -pipe -Wundef -Winline --param large-function-growth=100000 -Wall -lm -lgd -L/var/www/html/Bioinformatics/tools/Ribomaker/contrafold/src/libgd/ -lpng16 -L/var/www/html/Bioinformatics/tools/Ribomaker/contrafold/src/libpng -o plot_rna EncapsulatedPostScript.o PlotRNA.o SStruct.o Utilities.o
Y me lanza el mismo error
Code: [Select]
undefined reference PlotRNA.cpp:(.text+0x223b): undefined reference to `gdImagePng'
He probado con:
g++ -O3 -DNDEBUG -W -pipe -Wundef -Winline --param large-function-growth=100000 -Wall -lm -lgd -L/path-to-library/libgd/ -lpng16 -L/path-to-library/libpng -l/path-to-library/libgd/libgd.so  -o plot_rna EncapsulatedPostScript.o PlotRNA.o SStruct.o Utilities.o

Y el error es
Code: [Select]
/usr/bin/ld: cannot find -l/path-to-library/libgd/libgd.so
y si le pongo el flag static
Code: [Select]
g++ -O3 -DNDEBUG -W -pipe -Wundef -Winline --param large-function-growth=100000 -Wall -static -lm -lgd -L/path-to-librarylibgd/ -lpng16 -L/path-to-library/libpng -o plot_rna EncapsulatedPostScript.o PlotRNA.o SStruct.o Utilities.o
El error es:
Code: [Select]
/usr/bin/ld: cannot find -lgd
Alguna idea mas de que puedo estar haciendo mal?
« Last Edit: Febrero 12, 2014, 05:56:20 pm by vale_N »

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5473
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: como linkar funcion y libreria ??
« Reply #3 on: Febrero 12, 2014, 06:27:17 pm »
Mira a ver esto http://daemonforums.org/showthread.php?t=1211

Por cierto, ¿no estarás poniendo de verdad -L/path-to-library ?

Se bueno.

vale_N

  • Newbie
  • *
  • Posts: 20
  • Karma: 0
    • View Profile
Re: como linkar funcion y libreria ??
« Reply #4 on: Febrero 12, 2014, 06:41:11 pm »
Mira a ver esto http://daemonforums.org/showthread.php?t=1211

Por cierto, ¿no estarás poniendo de verdad -L/path-to-library ?

Se bueno.

Noooo!!!!!!!
He probado con varias versiones de la libreria libgd, 2.1.0RC1 y 2.1.0RC2, tambien con 2.0.35RC1, he probado a quitar todo y empezar de cero y me siempre el error en esa libreria.
Tambien he visto que algunos hablan de un bug en la version 2.0.35RC1 (lo encontré despues de descargarla), pero no encuentro la RC2, quizá en la version 2.1.0 hayan cambiado esa funcion, porque si ejecuto el comando
Code: [Select]
nm libgd.so |grep gdImagePng
El resultado es:
Code: [Select]
000000000000f720 T gdImagePngToSink
En cualquiera de las 3 librerias por lo tanto ya no se si es que soy tonto o que...

 

ey