Avatar billede linuxabe Nybegynder
28. oktober 2005 - 20:03 Der er 14 kommentarer

c og mysql

Vil gerne lege lidt med mysql via et c program og har derfor fundet følgende eksempel med det virker ikke helt.

#include <stdio.h>
#include <stdlib.h>

#include "mysql.h"

int main()
{
    /* connection */
    MYSQL *handle;
    /* query result */
    MYSQL_RES *result;
    /* række i query result */
    MYSQL_ROW row;
    /* antal felter i query result */
    int nfields;
    /* pointer til array med felt længder i række i query resuult */
    int *l;
    /* counter */
    int i;
    /*
    * åben connection til:
    *  server = "localhost"
    *  username = "root"
    *  password = ""
    *  database = "Test"
    *  port = 0 (bliver opfattet som default 3306)
    */
    handle= mysql_init(NULL);
    if(handle == NULL)
    {
        printf("MySQL error: %s", mysql_error(handle));
        exit(1);
    }
    if(!mysql_real_connect(handle, "localhost", "root", "", "Test", 0, NULL, 0))
    {
        printf("MySQL error: %s", mysql_error(handle));
        exit(1);
    }
    /* udfør query */
    mysql_query(handle, "SELECT * FROM t1");
    result = mysql_store_result(handle);
    /* print resultat af query */
    nfields = mysql_num_fields(result);
    while ((row = mysql_fetch_row(result))) {
        l = (int *)mysql_fetch_lengths(result);
        for (i=0; i<nfields; i++) {
            printf(" %.*s", row[i] ? l[i] : 4, row[i] ? row[i] : "NULL");
        }
        printf("\n");
    }
    /* luk query */
    mysql_free_result(result);
    /* luk connection */
    mysql_close(handle);
    return 0;
}


[root@localhost mysql]# gcc -Wall -c my.c -I/usr/include/mysql
[root@localhost mysql]# ls
  my.c*  my.o
[root@localhost mysql]# gcc -o my my.o -L/usr/lib/mysql -lm - lmysqlclient
gcc: lmysqlclient: No such file or directory
gcc: -E required when input is from standard input
[root@localhost mysql]# gcc -o my my.o -L/usr/lib/mysql -lm -lmysqlclient
/usr/lib/mysql/libmysqlclient.a(my_malloc.o)(.text+0x25): In function `my_malloc':
: undefined reference to `errno'
/usr/lib/mysql/libmysqlclient.a(my_malloc.o)(.text+0xb5): In function `my_memdup':
: undefined reference to `errno'
/usr/lib/mysql/libmysqlclient.a(my_malloc.o)(.text+0x18d): In function `my_strdup':
: undefined reference to `errno'
/usr/lib/mysql/libmysqlclient.a(my_realloc.o)(.text+0x55): In function `my_realloc':
: undefined reference to `errno'
/usr/lib/mysql/libmysqlclient.a(my_getwd.o)(.text+0x36): In function `my_getwd':
: undefined reference to `errno'
/usr/lib/mysql/libmysqlclient.a(my_getwd.o)(.text+0xb2): more undefined references to `errno' follow
collect2: ld returned 1 exit status

Hvad gør jeg galt?
Avatar billede arne_v Ekspert
28. oktober 2005 - 20:15 #1
Version af MySQL ?

Version af GCC ?
Avatar billede linuxabe Nybegynder
28. oktober 2005 - 20:52 #2
Mysql 4.0.20 gcc 2.96-0.83 mandrake 10.1
Avatar billede arne_v Ekspert
28. oktober 2005 - 21:03 #3
GCC 2.96 er berygtet

jeg kunne sagtens forestille mig at den kunne give dette problem

har du mulighed for at opdatere din GCC ?
Avatar billede linuxabe Nybegynder
29. oktober 2005 - 12:22 #4
prøver at hente en gcc 3.4.1 og ser om den kan bruges, men har desværre ikke internet så kan ikke teste det så hurtigt....
Avatar billede linuxabe Nybegynder
29. oktober 2005 - 16:38 #5
så fik jeg installeret gcc 3.4.1, men fejlbeskrivelsen er den samme....
Avatar billede linuxabe Nybegynder
30. oktober 2005 - 14:07 #6
Skal jeg installer en anden linux....

Vil også gerne installer en som er god til et embedded system da jeg med tiden gerne skulle ha det til at kører på sådanne et....
Avatar billede arne_v Ekspert
30. oktober 2005 - 14:24 #7
det burde sagtens kunne virke på enhver Linux

2 forslag:

1)

prøv og inkluder errno.h i dit program

2)

prøv og opdater MySQL
Avatar billede linuxabe Nybegynder
30. oktober 2005 - 15:24 #8
har prøvet at include errno.h uden held,

kan du ikke komme med et link til en passende mysql og gcc rpm så jeg er sikker på det ikke er det...
Avatar billede linuxabe Nybegynder
31. oktober 2005 - 16:25 #9
jeg har prøvet at installer Mandrake 10.1 igen på en tom hd, og fundet udaf at der ikke oprettes /usr/include/mysql og heller ikke /usr/lib/mysql.

Så dem jeg har installeret nu må være noget jeg har hentet på et tidspunkt, men nu vil jeg gerne vide hvad jeg skal hente for at det er det rigtige.

Jeg har installeret både gcc og mysql, så det er ikke derfor det ikke er der...
Avatar billede arne_v Ekspert
31. oktober 2005 - 16:57 #10
include og lib kommer vist med et specielt development kit som skal installeres separat
Avatar billede arne_v Ekspert
31. oktober 2005 - 16:58 #11
"Libraries and header files" hedder det
Avatar billede linuxabe Nybegynder
31. oktober 2005 - 18:51 #12
syntes det er lidt træls kan når jeg finder de pakker jeg tror jeg skal bruge kræver de noget andet og sådan bliver det ved.... og så kan jeg ikke finde alle pakkerne...
Avatar billede arne_v Ekspert
31. oktober 2005 - 19:27 #13
har mandrake ikk et etool som kan hente alle pakker inkl. dependencies

apt-get/up2date/yum
Avatar billede linuxabe Nybegynder
01. november 2005 - 17:07 #14
er ikke 100% dus med linux endnu...

så ved det ikke
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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