2010-12-07 24 views
2

J'utilise MAC OSX et essayer d'écrire une application msyql 'test' qui teste simplement la connexion à une base de données locale:Pourquoi est-ce que je continue d'obtenir des symboles non définis lors de la compilation d'une simple application mysql c sur MAC OSX?

#include <my_global.h> 
#include <mysql.h> 


int main(void) 
{ 
    MYSQL mysql; 

    mysql_init(&mysql); 
    mysql_options(&mysql, MYSQL_READ_DEFAULT_GROUP, "examplemysql"); 
    if(!mysql_real_connect(&mysql, "localhost", "someuser", "somepassword", "sampledb", 0, NULL, 0)) 
    { 
     fprintf(stderr, "Failed to connect to database: Error: %s\n", mysql_error(&mysql)); 
    } 

} 

je compile avec la commande: gcc -I/usr/local/mysql/include -L/usr/local/mysql/lib mysql.c

-je obtenir les erreurs suivantes

symboles non définis
"de _mysql_options", fait référence à partir de:
_main dans cceohP7E.o
"_mysql_real_connect", référencé à partir de:
_main dans cceohP7E.o
"_mysql_init", référencé à partir de:
_main dans cceohP7E.o
"_mysql_error", référencé à partir de:
_main dans cceohP7E.o
ld: symbole (s) non trouvé
collect2: ld retourné 1 état de sortie

Je ne suis pas C/Unix expert, mais je veux apprendre. Je sais que j'ai une architecture 64 bits qui fonctionne ici. Cela peut-il être un problème? Faites-moi savoir ce que je fais mal.

Merci.

+0

Votre éditeur de liens ne trouve pas vos en-têtes d'inclusion, ou ceux qui ne sont pas les bons en-têtes.Êtes-vous sûr que les fonctions que vous appelez sont définies dans ces en-têtes? – Falmarri

+0

Je suis à la recherche dans les fichiers d'en-tête, et non je ne trouve pas exactement le "_mysql_options", etc. Ma question est maintenant, d'où vient ce "_mysql_options"? – EDJ

Répondre

3

Comme les autres l'ont mentionné, vous manquez la bibliothèque. Heureusement, MySQL facilite cette opération via la ligne de commande de mysql_config:

gcc `mysql_config --include` mysql.c `mysql_config --libs` 
+0

merci pour le raccourci :) – EDJ

1

Vous devez lier dans la bibliothèque partagée libmysql.so, ce sont des erreurs de liaison avec essayer de trouver d'autres symboles.

Quelque chose comme ça ...

gcc -I/usr/local/mysql/include -L/usr/local/mysql/lib mysql.c -lmysql

+0

Merci de m'indiquer dans la bonne direction. – EDJ

1

Je met à jour cette réponse pour OSX Lion et pour tous ceux qui cherchent ce ... juste parce qu'il était difficile pour moi.

Le mysql_config est une option, ou en spécifiant les drapeaux gcc vous-même est une autre mais sans le bon connecteur C, tout échoue.

Je suis sur Lion 10.7.4 air macbook et je téléchargé mysql-connector-c-6.0.2-OSX10.5-x86-64bit.tar que je suis arrivé de http://ftp.dc.aleron.net/pub/mysql/Connector-C/

décompressez et décompressez tous les fichiers et copiez les respectifs/bin/include et/lib fichiers dans les répertoires/respectifs usr/local/bin,/usr/local/include et/usr/lib/LICAL en tant que root

alors j'ai utilisé gcc -o mysqlapp mysqlapp.c -l/usr/local/lib -l mysqlclient -lz -I/usr/local/include

mysqlapp.c utilise mysql.h et tout compile et fonctionne bien. Le connecteur que j'ai téléchargé à l'origine sur www.mysql.com ne fonctionnerait pas correctement. Je ne suis pas sûr de ce qui s'est passé avec celui-là.