[SUSE / Gentoo] libjpeg-functies geven undefined reference

Pagina: 1
Acties:

  • XiN-eViL
  • Registratie: Maart 2004
  • Laatst online: 05-01 08:52

XiN-eViL

kzie-nie-veel

Topicstarter
Hallo :)!
Ik probeer libjpeg te gebruiken in een programma, maar zodra ik dit programma probeer te compilen (met make), krijg ik dit:
code:
1
2
3
4
5
6
7
xin-evil@xept ~/aibo/aibo/src/vision $ make
c++ -o Vision jpegread.o image.o ../common/log.o ../common/config.o settings.o ../common/cmath.o ball.o main.o -ljpeg -L/usr/lib
jpegread.o: In function `jpegwrite(char*, int, int, int, unsigned char*, J_COLOR_SPACE)':
/home/xin-evil/aibo/aibo/src/vision/jpegread.cpp:73: undefined reference to `jpeg_std_error(jpeg_error_mgr*)'
/home/xin-evil/aibo/aibo/src/vision/jpegread.cpp:74: undefined reference to `jpeg_CreateCompress(jpeg_compress_struct*, int, unsigned)'
/home/xin-evil/aibo/aibo/src/vision/jpegread.cpp:75: undefined reference to `jpeg_stdio_dest(jpeg_compress_struct*, _IO_FILE*)'
/home/xin-evil/aibo/aibo/src/vision/jpegread.cpp:81: undefined reference to `jpeg_set_defaults(jpeg_compress_struct*)'

En nog veel meer undefined references.
Dit is op zowel SUSE als gentoo. Een vriend van mij heeft het geprobeerd op Fedora, en daar werkt het wel.
Libjpeg is geïnstalleerd, hij kan de header vinden, maar hij snapt de functies gewoon niet ofzo :?.
Google snapt er ook niks van, dan zeggen ze 'zet -ljpeg achter de c++', maar dat staat er al (zoals je ziet).

WIe o wie kan mij helpen :)?

  • irondog
  • Registratie: Januari 2001
  • Laatst online: 11-05-2025

irondog

alle dingen moeten onzin zijn

Kweet niet of je een beetje verstand hebt van C/ C++, maar een undefined reference is een linker error. Over het algemeen betekent dat, dat je niet de juiste object files meegeeft aan de linker of het verkeerde zoekpad.

Ik wil in jouw geval opmerken dat je een in C geschreven library linkt tegen een C++ applicatie. Je moet hierbij goed opletten dat je linker errors kunt krijgen als je niet extern "C" bij de includes zet die gebruikt worden. Naar zulke fouten kun je je ziek zoeken en moet je gewoon ff weten :)

code:
1
2
3
extern "C" {
#include <jpeglib.h>
}


Als een programmeur dit vergeet, dan zou het best kunnen compileren op de ene distro en op de andere niet :)

[P5B deluxe] [Core2Duo 6300] [2 X 1GB DDR2] [GF FX7300] [320 GB WD] [Gentoo] [VISTA]


  • XiN-eViL
  • Registratie: Maart 2004
  • Laatst online: 05-01 08:52

XiN-eViL

kzie-nie-veel

Topicstarter
irondog schreef op zaterdag 22 april 2006 @ 19:21:
Kweet niet of je een beetje verstand hebt van C/ C++, maar een undefined reference is een linker error. Over het algemeen betekent dat, dat je niet de juiste object files meegeeft aan de linker of het verkeerde zoekpad.

Ik wil in jouw geval opmerken dat je een in C geschreven library linkt tegen een C++ applicatie. Je moet hierbij goed opletten dat je linker errors kunt krijgen als je niet extern "C" bij de includes zet die gebruikt worden. Naar zulke fouten kun je je ziek zoeken en moet je gewoon ff weten :)

code:
1
2
3
extern "C" {
#include <jpeglib.h>
}


Als een programmeur dit vergeet, dan zou het best kunnen compileren op de ene distro en op de andere niet :)
Jij....bent geweldig :D! ty :)

  • irondog
  • Registratie: Januari 2001
  • Laatst online: 11-05-2025

irondog

alle dingen moeten onzin zijn

Nu ben ik eigenlijk zelf wel nieuwsgierig naar waar het verschil nu in zit tussen Gentoo / Suse enerzijds en Fedora anderzijds:
* Heeft Fedora een "vriendelijkere" binutils?
* Bevat Fedora's libjpeg.h zelf de extern C macro?
* Compileert fedora jpeg met een C++ compiler?

Alle drie de oplossingen zijn niet echt vriendelijk / OK. Goedkoop is uiteindelijk duurkoop! Eigenlijk had ie op Fedora net zo min mogen compileren :)

[P5B deluxe] [Core2Duo 6300] [2 X 1GB DDR2] [GF FX7300] [320 GB WD] [Gentoo] [VISTA]


  • XiN-eViL
  • Registratie: Maart 2004
  • Laatst online: 05-01 08:52

XiN-eViL

kzie-nie-veel

Topicstarter
irondog schreef op zaterdag 22 april 2006 @ 20:14:
Nu ben ik eigenlijk zelf wel nieuwsgierig naar waar het verschil nu in zit tussen Gentoo / Suse enerzijds en Fedora anderzijds:
* Heeft Fedora een "vriendelijkere" binutils?
* Bevat Fedora's libjpeg.h zelf de extern C macro?
* Compileert fedora jpeg met een C++ compiler?

Alle drie de oplossingen zijn niet echt vriendelijk / OK. Goedkoop is uiteindelijk duurkoop! Eigenlijk had ie op Fedora net zo min mogen compileren :)
Fedora's libjpeg.h bevat iig niet de Extern C macro.
Van de andere 2 dingen zou ik t zo niet weten :P

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025

GX

Nee.

Wat belangrijk is om te weten is de _versie_ van je libraries. Gentoo, Suse en fedora hebben alle 3 een eigen pakketten-distributiesysteem, en de versies kunnen dus onderling sterk verschillen. Vooral bij fedora welk eigenlijk een unstable-software-speeltuin is komt het vaak voor dat er verschillen zijn. Dus je moet gewoon weten waar je mee bezig bent.
Pagina: 1