Avatar billede jnusa Nybegynder
13. januar 2005 - 13:19 Der er 8 kommentarer og
1 løsning

zlib.h problem

Siden jeg ikke har haft så meget respons på LQ, prøver jeg lige her:
m trying to use the zlib library and it seems like it is included and found (when I compile the c file using the zlib.h, there's no error). Never the less, when I link my program I get a undefined reference, to the function I use i zlib (compress2).

    code:

//gzip_interface.c

#include <string.h>
#include <stdlib.h>
#include <linux/zlib.h>
#include "gzip_interface.h"

int compress_buf(char *dst, char *src, unsigned short int level )
{
    int size = strlen(src);
    int return_size = 0;
    dst = malloc(size);
    return_size = compress2(dst, size, src, size, level);
    return 0;
   
}

//gzip_interface.h

#ifndef GZIP_INTERFACE
#define GZIP_INTERFACE

int compress_buf(char *dst, char *src, unsigned short int level);
#endif




How can this be? I've search for zlib, and it is located in /usr/include and also in /usr/include/linux. I've tried including it like this: #include <zlib.h>, but it's the same problem. There's no problem including the library, but it doesn't seem to find the functions. I'm using Anjuta (on ProMepis 2005.b04), and I've tried adding the library manually, so it links with -lzlib option.. that didn't work either (Second Q: How do you know when it need to be included manually when linking? .. e.g. pthread needs to : -lpthread ??).
Any help will be greatly appriciated.

Regards jnusa
Avatar billede arne_v Ekspert
13. januar 2005 - 13:31 #1
I thougth it was just:

-lz

and not -lzlib.

Do you have a libz.a or a libzlib.a ?
Avatar billede soreno Praktikant
13. januar 2005 - 13:40 #2
Jeg har lige kompileret zlib og output var en libz.a

Jeg har ikke svaret på hvornår libs skal inkluderes manuelt, men hvis jeg har en undefined reference når jeg linker - så prøver jeg at finde ud af hvilket lib der mangler.
Avatar billede soreno Praktikant
13. januar 2005 - 13:42 #3
Hacker måden at finde ud af hvilket lib der hører til hvad er at greppe efter den funktion linker brokker sig over, i de(t) directory der indeholder libs.
Avatar billede jnusa Nybegynder
13. januar 2005 - 13:43 #4
Undskylder for misfotståelsen. Jeg har copy pasted min post fra linuxquestions.org... derfor på engelsk :)
Men det spinder som en mis nu. Takker mange gange. Syntes dog ikke det er logisk, at man blot skal link med -lz i stedet for -lzlib. Og hvornår ved at, at den skal have eksterne linker options? Syntes jeg kan huske jeg har haft lign. problem med glib eller lign. Skal det så linkes med -lg?
Takker arne_v
Avatar billede arne_v Ekspert
13. januar 2005 - 13:47 #5
Det er måske ikke specielt logisk, men sådan er det.

Du includer xxx.h og du linker med -lyyy som betyder libyyy.a i de directories
hvor compileren søger efter dem (du kan ændre det med -L).

Sommetider er xxx og yyy det sammen. Sommetider er de ikke.

I det her tilfælde har man nok vurderet at libzlib.a lød fjollet.
Avatar billede arne_v Ekspert
13. januar 2005 - 13:47 #6
Det bør naturligvsi fremgå af man pages hvad header filen og lib hedder.
Avatar billede arne_v Ekspert
13. januar 2005 - 13:48 #7
og et svar
Avatar billede jnusa Nybegynder
13. januar 2005 - 13:49 #8
arne: hvis du vil have point, må lige lige svare.
Avatar billede jnusa Nybegynder
13. januar 2005 - 13:50 #9
super, takker for den hurtige responds...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester