[Objective-C] Koppelen met MySQL

Pagina: 1
Acties:

  • Mikey NL
  • Registratie: Februari 2004
  • Laatst online: 07-02 14:00
Ik ben van de week beginnen met programmeren in Objective-C / cocoa op de mac, maar ik dacht dat dit topic beter paste in programmeren dan in het forum over de Mac, omdat het (waarschijnlijk ook over gewoon C gaat).

Ik heb dus van de week eerst een paar tutorials gedaan over cocoa, en heb toen zelfstandig een simpele rekenmachine in elkaar geflanst, so far, so good.

Maar, omdat het uiteindelijke doel een applicatie is die met een MySQL database gaat communiceren is, wilde ik nu proberen een connectie te maken met MySQL en daar iets nuttigs mee te gaan doen.

Bij het zoeken naar informatie ben ik kortweg twee mogelijkheden tegengekomen:
- Het gebruiken van een Objective-C Framework MySQL-Cocoa
- Het gebruiken van de MySQL C api (Objective-C is een supertaal iets op C, en dus kan het normale C code verwerken (toch?))

Ik wilde dus eerst de simpele oplossing proberen, de C api gebruiken van MySQL, wat resulteerde in het volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#import <Cocoa/Cocoa.h>
#import </usr/local/mysql/include/mysql.h>

int main(int argc, char *argv[]){
    
    MYSQL *conn;

    char *server = "localhost";
    char *user = "root";
    char *password = "test";
    char *database = "blauw";
    
    mysql_real_connect(conn,server,user,password,database,0,NULL,0);
    
    return NSApplicationMain(argc,  (const char **) argv);
}


Gewoon een stukje waarmee de database connectie opgezet zou worden. Volgens de docs op MySQL.com zou het zo moeten werken, maar ik krijg nu de volgende error:
code:
1
2
3
ZeroLink: unknown symbol '_mysql_real_connect'

database2 has exited due to signal 6 (SIGABRT).


Zoeken op google levert helaas weinig op, het enige nuttige wat ik kon vinden was dat SIGABRT een error was waarmee C programma's onbedoeld stoppen.... maar daar was ik al achter :P

Er staat echter iets vermeld over unknown symbol, wat zou betekenen dat die methode niet in de klasse voorkomt, maar dat lijkt me sterk. De header file kan gewoon geopend worden (juiste rechten) en ik kan er wel in zoeken, maar wat er in die file staat is nog een beetje te ver gegrepen voor mij.

Ohja, nog iets, in de mysql->include map staan die header files, maar moet er ook niet een .c of .m file ofzo zijn voor elke header file?

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Ik denk dat je nog even aan moet geven dat je de MySQL libraries ook mee wil linken. Hoe je dat doet staat wel in de handleiding van je compiler

Nu met Land Rover Series 3 en Defender 90


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

GX

Nee.

mysql_config is wat je zoekt

  • Mikey NL
  • Registratie: Februari 2004
  • Laatst online: 07-02 14:00
Zou je dat misschien iets meer kunnen uitleggen? Heb het opgezocht, maar ik weet niet precies hoe ik dat kan gaan gebruiken?
MTWZZ schreef op dinsdag 19 september 2006 @ 17:14:
Ik denk dat je nog even aan moet geven dat je de MySQL libraries ook mee wil linken. Hoe je dat doet staat wel in de handleiding van je compiler
Heb nu ZeroLink uitgezet, en nu gaat ie inderdaad proberen om de mysql libs te linken (denk ik, er komt linkin in het activiteiten scherm te staan) maar dan krijg ik nog steeds de error dat _mysql_real_connect een unknown symbol is.

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 13-02 18:14

MBV

mysql_config is het commando dat je op linux kunt uitvoeren (windows weet ik niet) om de lokatie van de library te vinden die je mee moet geven. die geeft het bestand terug dat je aan je compiler mee moet geven als object (of de .lib om de dll te gebruiken) om tegenaan te linken :)

[ Voor 6% gewijzigd door MBV op 19-09-2006 18:50 ]


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

GX

Nee.

Of zelfs gewoon de hele compiler flags, scheelt je weer klooien. Vaak is `mysql_config --cflags --libs` alles wat je aan de gcc commandline hoeft mee te geven, en dan werkt je programma.
Pagina: 1