Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C-Kääntämisen alkeet (kirjaston linkitys) hukassa

peran [30.01.2024 15:12:33]

#

Tämä pitäisi saada käännettyä gcc:llä, mutta kääntäjä ei löydä kirjastoa...

#include <glib.h>
#include <stdio.h>

int main(int argc, char** argv) {
    GString* list = NULL;
    char hello[]="Hello world!";
    gchar * hellog=NULL;
    hellog=hello;
    list=g_string_new("");
    printf("The first item is '%s'\n", (char *)"hmm");
    printf("Kääntyy\n");
 return 0;
}

Tämä koodi antaa virheen...

$ gcc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include   -o OmaRapellykseni2 OmaRapellykseni3.c
/usr/bin/ld: /tmp/cchwNkoZ.o: in function `main':
OmaRapellykseni3.c:(.text+0x5e): undefined reference to `g_string_new'
collect2: error: ld returned 1 exit status

... yrittäessäni kääntää sitä, mutta jos kommentoin list=g_string(""), niin ohjelma kääntyy...

#include <glib.h>
#include <stdio.h>

int main(int argc, char** argv) {
    GString* list = NULL;
    char hello[]="Hello world!";
    gchar * hellog=NULL;
    hellog=hello;
    //list=g_string_new("");
    printf("The first item is '%s'\n", (char *)"hmm");
    printf("Kääntyy\n");
 return 0;
}
$ gcc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include   -o OmaRapellykseni2 OmaRapellykseni3.c

Mitähän pitäisi asentaa/muuttaa käännöskäskyn parametreja Käyttiksenä Ubuntu-variantti.

peran [30.01.2024 15:36:05]

#

Kiitokset avusta...
... Heti auttoi, kun kysyi täällä asiaa...

gcc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include     -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE  -g -std=c99     OmaRapellykseni3.c -lglib-2.0 -lm -o OmaRapellykseni4

mavavilj [01.03.2024 20:32:43]

#

Niin, vastaisuuden varalle:

Jos ld:stä (linkkeri) tulee virhe, että:

undefined reference

Niin tämä tarkoittaa aina, että linkkeri ei löydä kyseistä symbolia. Tämä tarkoittaa, että sitä ei ole sisällytetty linkerille annettavaan koodiin.

Tässä tapauksessa, se ei löydä g_string_new -funktiota.

Tässä tapauksessa oleellinen osa on siis:

-lglib-2.0

joka sisältää lähdekoodin ko. funktiolle. -I antaa vain header:t.

-D:t on optioita eli "konfiguraatioita". -std taas vinkkaa, että missä standardissa ollaan, koska asiat muuttuvat standardien välillä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta