2010-12-07 4 views
2

Ich verwende MAC OSX und versuchen, einen 'Test' msyql App zu schreiben, die die Verbindung zu einer lokalen Datenbank testet gerade:Warum bekomme ich beim Kompilieren einer einfachen mysql c-Anwendung unter Mac OSX undefinierte Symbole?

#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)); 
    } 

} 

ich den Befehl kompilieren mit gcc -I/usr/local/mysql/include -L/usr/local/mysql/lib mysql.c

ich die folgenden Fehler

undefinierte Symbole
"_mysql_options", verwiesen von:
_main in cceohP7E.o
"_mysql_real_connect", verwiesen von:
_main in cceohP7E.o
"_mysql_init", verwiesen von:
_main in cceohP7E.o
"_mysql_error", verwiesen von:
_main in cceohP7E.o
ld: Symbol (e) nicht
collect2 gefunden: ld returned 1 exit status

ich bin kein C/Unix-Experte, aber ich will lernen. Ich weiß, dass hier eine 64-Bit-Architektur läuft. Kann das ein Problem sein? Lass mich wissen, was ich falsch mache.

Danke.

+0

Ihr Linker findet Ihre Include-Header nicht, oder diese sind nicht die richtigen Header.Sind Sie sicher, dass diese Funktionen, die Sie aufrufen, in diesen Headern definiert sind? – Falmarri

+0

Ich suche die Header-Dateien, und nein, ich finde nicht genau die "_mysql_options" usw. Meine Frage ist nun, woher kam diese "_mysql_options"? – EDJ

Antwort

3

Wie die anderen schon erwähnt haben, sind Sie nicht die Bibliothek. Glücklicherweise macht MySQL dies einfach über die Befehlszeile des mysql_config:

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

danke für die Abkürzung :) – EDJ

1

Sie müssen in der gemeinsam genutzten Bibliothek libmysql.so verknüpfen, das sind Linker-Fehler mit dem Versuch, andere Symbole zu finden.

So etwas ...

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

+0

Danke, dass Sie mich in die richtige Richtung weisen. – EDJ

1

ich diese Antwort für OSX Lion bin Aktualisierung und für alle, die diese Suche läuft ... nur weil es für mich schwierig war.

Die mysql_config ist eine Option, oder die gcc-Flags selbst anzugeben ist eine andere, aber ohne den richtigen C-Connector schlägt alles fehl.

Ich bin auf Lion 10.7.4 Macbook Luft und ich heruntergeladen mysql-connector-c-6.0.2-osx10.5-x86-64bit.tar, die ich von http://ftp.dc.aleron.net/pub/mysql/Connector-C/ bekam

untar und entpacken Sie alle Dateien und kopieren Sie die entsprechenden/bin/include und/lib Dateien in die entsprechenden/usr/local/bin,/usr/local/include und/usr/lical/lib Verzeichnisse als root

dann habe ich gcc -o mysqlapp mysqlapp.c -L/usr/local/lib -l mysqlclient -lz -I/usr/local/include

mysqlapp.c verwendet mysql.h und alles kompiliert und läuft gut. Der Connector, den ich ursprünglich von www.mysql.com heruntergeladen habe, würde nicht korrekt funktionieren. Ich bin mir nicht sicher, was mit dem passiert ist.

Verwandte Themen