Linker Errors



  • In der Unix Programmierung kenn ich mich nicht so gut aus, daher wundere ich mich über folgende Fehler:

    sqlconnect2/src/sqlconnect2.c:49: undefined reference to `mysql_init'
    sqlconnect2/src/sqlconnect2.c:57: undefined reference to `mysql_real_connect'
    sqlconnect2/src/sqlconnect2.c:65: undefined reference to `mysql_real_query'
    sqlconnect2/src/sqlconnect2.c:72: undefined reference to `mysql_store_result'
    sqlconnect2/src/sqlconnect2.c:73: undefined reference to `mysql_num_fields'
    sqlconnect2/src/sqlconnect2.c:74: undefined reference to `mysql_fetch_fields'
    sqlconnect2/src/sqlconnect2.c:81: undefined reference to `mysql_fetch_row'
    

    (In dem Programm geht es darum, ne Anfrage an einen MySQL Server zu stellen)

    Was mich hier wundert ist, dass beim Kompilieren die mysql-API Funktionen bekannt sind, sobald es ans Linken geht kommen dise Fehler. Ich weiss, dass die normalerweise von unbekannten Headern her rühren, daher hier mal alle header:

    #ifdef HAVE_CONFIG_H
    #include <config.h>
    #endif
    
    #include <stdio.h>
    #include <stdlib.h>
    
    #include <mysql.h>
    

    Wenn ich den Header nicht eingebunden hätte, könnte der Kompiler den ja auch logischerweise nicht kennen.

    Habe ich vielleicht die Header in einem falschen Verzeichnis liegen (ist bei mir
    /usr/include) oder sonst irgendwas vergessen vorher einzustellen?



  • Du musst die Library richtig linken. Ansonsten weiß der Linker nicht, wo er die Funktionen finden soll. Siehe -l und -L Option des GCCs.



  • Ich habe das aus dem KDevelop heraus getan, per "Erstellen" (ist doch eigentlich nix anders als "gcc -o [dateinamewenndatfertigist] [name von den Quellcodedateien]", oder täusche ich mich da?

    Ansonsten...wie linke ich die lib richtig...? Also, wo muss ich was wie einstellen? Mit Visual Studio war das immer recht einfach, nur muss ich in sachen Linux eben noch ne Menge lernen.



  • PhysFehler (anderer PC) schrieb:

    Ich habe das aus dem KDevelop heraus getan, per "Erstellen" (ist doch eigentlich nix anders als "gcc -o [dateinamewenndatfertigist] [name von den Quellcodedateien]", oder täusche ich mich da?

    Ansonsten...wie linke ich die lib richtig...? Also, wo muss ich was wie einstellen? Mit Visual Studio war das immer recht einfach, nur muss ich in sachen Linux eben noch ne Menge lernen.

    Du musst dem Projekt sagen, dass mysql mitgelinkt werden soll. Das ist jedoch abhängig von der Projektart die du hast. Qmake und Automake Projekte werden über den jeweiligen Manager geändert. Da musst du die Eigenschaften der Targets auswählen und die lib Eintragen. Bei make basierten Projekten musst du das selbst in das Makefile eintragen.



  • Und wie geht das...selber in der Makefile eintragen? Es hgandelt sich allerdings um ein Automake Projekt.



  • Wie kingruedi schon sagte, mit der -l option.
    Wenn du aus

    gcc -o bla blub.cpp
    
    gcc -o bla blub.cpp -lmysql
    

    machst, sucht der linker nach einer libmysql.so (oder .a) benannten Datei in den standard Bibliotheksverzeichnissen. mit -L kannste noch mehr Verzeichnisse angeben.. Z.B -L/home/ich/meineLibs/

    Mit Autoconf kenn ich mich nicht aus, aber: ja musst Du in die Makefile eintragen..
    'man gcc' für mehr info ("/" für die Suchfunktion)



  • Physikalischer Fehler schrieb:

    Und wie geht das...selber in der Makefile eintragen? Es hgandelt sich allerdings um ein Automake Projekt.

    Hab dir doch geschrieben, dass du das in den Einstellungen zum Target machen musst. Die Targets sind im Automake Manager.



  • Okay, das habe ich halbwegs gerafft, denke ich mal. Ein ganz anderes Problem ist, dass ich die Libs nicht finde (habe den Rechner nach allem, was die Zeichenkette "lib" enthält suchen lassen. Wie heissen die bei Euch bzw. wo liegen die bei Euch?



  • Eventuell musst du die mysql-devel pakete installieren.

    die datei, die zum linken gebraucht wird, heisst libmysql.so



  • Danke! Weisst Du wo es die Distributionunabhängig gibt...?



  • Phys. schrieb:

    Danke! Weisst Du wo es die Distributionunabhängig gibt...?

    Als Sourcecode.



  • www.mysql.de

    Hier die richtigen Pakete für seine Plattform und es geht.
    Es soll auch Programme geben die Distributionsunabhängig sind.
    Wenn sich eine Distrib. an die Ordnervorgaben hält ist es jedes Paket. Hier kommt es dann nur noch darauf an mit welcher GLIB gelinkt wurde.


Anmelden zum Antworten