Avatar billede don_r Nybegynder
08. marts 2004 - 09:33 Der er 17 kommentarer og
1 løsning

mysql og c++

Jeg har oprettet spg. http://www.eksperten.dk/spm/473244 her er jeg kommet et stykke vej. Nu har jeg følgende:

#define SOCKET int
#include "mysql.h"
#include <stdio.h>
#include <stdlib>
using namespace std;

int main(void) {
    MYSQL* mysql_handle = mysql_init(NULL);
    MYSQL_RES *result;
    MYSQL_ROW row;

    int num_fields;
    int i;

    if(mysql_handle == NULL)
    {
        printf("MySQL error: %s", mysql_error(mysql_handle));
        exit(1);
    }

    if(!mysql_real_connect(mysql_handle, "localhost", "root", "", "test", 0, NULL, 0))
    {
        printf("MySQL error: %s", mysql_error(mysql_handle));
        exit(1);
    }

    mysql_query(mysql_handle, "SELECT cd_nr, artist, titel FROM numre");

    result = mysql_store_result(mysql_handle);
    num_fields = mysql_num_fields(result);

    while ((row = mysql_fetch_row(result))) {

        unsigned long *lengths;
        lengths = mysql_fetch_lengths(result);

        for (i=0; i<num_fields; i++) {
            printf("[%.*s]", (int) lengths[i], row[i] ? row[i] : "NULL");
        }
        printf("\n");

    }

    mysql_free_result(result);
    mysql_close(mysql_handle);

    return 1;
}

Jeg får en masse linker errors, bl.a.
[Linker Error] Unresolved external 'mysql_init' referenced from C:\DOCUMENTS AND SETTINGS\ROBERT\DOKUMENTER\2 . SEM\DATABASETEST\MAIN.OBJ

Hvad kan der være galt ??
Avatar billede arne_v Ekspert
08. marts 2004 - 10:00 #1
Du skal linke mod MySQL library.

Som forklaret i det andet spm.:
  - konverter COFF til OMF
  - link med library
Avatar billede arne_v Ekspert
08. marts 2004 - 10:01 #2
Jeg har iøvrigt lige skrevet en artikel om C og MySQL (der er ikke meget mere end
hvad jeg allerede har forklaret).
Avatar billede don_r Nybegynder
08. marts 2004 - 11:00 #3
Har lige kørt:
coff2omf \mysql\lib\opt\libmysql.lib .\libmysql.lib

Det ser ud til at det virker, men får stadig linkererrors.
Avatar billede don_r Nybegynder
08. marts 2004 - 11:06 #4
Har du din artikel liggende, er det en jeg kan få ??
Avatar billede arne_v Ekspert
08. marts 2004 - 11:06 #5
Linker du også mod det nye libmysql.lib ?
Avatar billede arne_v Ekspert
08. marts 2004 - 11:07 #6
Artiklen er her på Eksperten:

http://www.eksperten.dk/artikler/206

men jeg tror ikke at der er meget nyt i den for dig
Avatar billede don_r Nybegynder
08. marts 2004 - 11:10 #7
Jeg er inde i projekt->Directories->Library path i borland. Her adder jeg mappen til den nye fil c:\programmer\borland\bin, i den ligger libmysql.lib
Avatar billede arne_v Ekspert
08. marts 2004 - 11:27 #8
Udover at adde directory skal du også adde selve libraryet.
Avatar billede don_r Nybegynder
08. marts 2004 - 15:14 #9
Ok, det kan jeg ikke lige se hvordan jeg gør, kan kun adde mappe ikke fil. Har du selv builder ?
Avatar billede arne_v Ekspert
08. marts 2004 - 15:17 #10
Kun command line versionen, så jeg ved ikke hvordan IDE'en er skruet sammen.

Har du prøvet online help for at se hvordan man tilføjer en lib fil ?
Avatar billede don_r Nybegynder
08. marts 2004 - 15:20 #11
nope, er på arbejde lige nu kigger på det når jeg kommer hjem.

Jeg har læst din artikel, den er god.
Avatar billede don_r Nybegynder
09. marts 2004 - 10:05 #12
Så er jeg tilbage

Mit projekt ligger i C:\CPP\db.

Jeg har skrevet følgende i cmd.

C:\CPP\db>coff2omf \mysql\lib\opt\libmysql.lib .\libmysql.lib 
- Virker, filen libmysql.lib ligger nu i C:\CPP\db
C:\CPP\db>bcc32 -DSOCKET=int -I\mysql\include main.cpp libmysql.lib
- Min fil hedder main.cpp - det ser ud til at det virker.
C:\CPP\db>PATH=\mysql\lib\opt;%PATH%
- Virker

I Borland Builder har jeg:
i include dir added C:\mysql\include\
i lib dir har jeg added C:\CPP\db

Men skidtet virker stadig ikke, kommer med linker errors som f.eks.
[Linker Error] Unresolved external 'mysql_init' referenced from C:\CPP\DB\MAIN.OBJ

Hmm jeg kan ikke lige forstå det ???
Avatar billede arne_v Ekspert
09. marts 2004 - 10:15 #13
Du mangler en tredie ting.

Udover at fortælle at den skal lede efter libs i C:\cpp\db skal du også
fortælle den at den eksplicit skal bruge libmysql.lib
Avatar billede don_r Nybegynder
09. marts 2004 - 10:21 #14
Det troede jeg at jeg havde gjort ved linien
C:\CPP\db>bcc32 -DSOCKET=int -I\mysql\include main.cpp libmysql.lib
Avatar billede arne_v Ekspert
09. marts 2004 - 10:26 #15
http://community.borland.com/article/0,1410,22694,00.html

indeholder følgende:

5.  Project  |  Add to Project...  |  change the file type to .lib, and select
your static library

Der er vel 20% sandsynelighed for at det virke !

:-)
Avatar billede arne_v Ekspert
09. marts 2004 - 10:26 #16
Den kommando linier bygger programmet command line me dlibrariet, men det
´påvirker ikke når du senere builder inde fra IDE.
Avatar billede don_r Nybegynder
09. marts 2004 - 10:37 #17
Det virkede f....., du er kongen ;o)

Var lige ved at opgive ...

Smid lige et svar..
Avatar billede arne_v Ekspert
09. marts 2004 - 10:49 #18
svar
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