gcc: /usr/include/mysql: linker input file unused because linking not done



  • Hi,

    ich bin noch relativ neu in C, aber möchte (bzw. muss) auf eine MySQL-Datenbank unter linux zugreifen. Ich richte mich dabei nach dem Buch "C von A bis Z" (http://www.galileo-press.de/openbook/c_von_a_bis_z/).
    Allerdings bekomm ich beim kompilieren von der Beispielanwendung immer den Fehler:
    gcc: /usr/include/mysql: linker input file unused because linking not done
    und dann noch etliche "undefined references", weil es die mysql.h eben nicht richtig läd...

    An was kann das liegen?
    Als Entwicklungsumgebung verwende ich KDevelop unter Suse 10.1
    mysql-develop-paket ist natürlich installiert...

    Danke,
    Jonas



  • Am besten Du postest mal die fehlerhafte Stelle samt Compiler- bzw Linkertext.

    In der Zwischenzeit kannst Du Dich mal hier umsehen. Da wird relativ genau die C-API von MySQL erklärt.

    Gruß SciFi



  • Okay, danke ich hab den Fehler entfernen können. hab jetzt nur noch die "undefined references"... hatte was in KDevelop falsch eingestellt.

    Mein Quelltext:

    #include <stdio.h>
    #include <stdlib.h>
    #include <mysql.h>
    
    int main( int argc, char *argv[] ) {
    	MYSQL * my;
    
    	/* Handle initialisieren */
    	my = mysql_init( NULL );
    	if ( my == NULL ) {
    		fprintf( stderr, " Initialisierung fehlgeschlagen\n" );
    		return EXIT_SUCCESS;
    	}
    
    	/* Mit dem Server verbinden */
    	if ( mysql_real_connect (
    	            my,    /* Zeiger auf MYSQL-Handler */
    	            "10.0.0.1",  /* Host-Name */
    	            "user",  /* User-Name */
    	            "passwd",  /* Passwort für user_name */
    	            "dbname",   /* Name der Datenbank */
    	            0,      /* Port (default=0) */
    	            NULL,   /* Socket (default=NULL) */
    	            0      /* keine Flags */ ) == NULL ) {
    		fprintf ( stderr, "Fehler mysql_real_connect():"
    		          "%u (%s)\n", mysql_errno ( my ), mysql_error ( my ) );
    	} else {
    		printf( "Erfolgreich mit dem MySQL-Server verbunden\n" );
    	}
    
    	/* Hier befindet sich der Code für die Arbeit mit MySQL */
    
    	/* Verbindung trennen */
    	mysql_close ( my );
    	return EXIT_SUCCESS;
    }
    

    Beim kompilieren bekomm ich folgende Ausgabe:

    cd '/home/jonas/daten/projekte/C++/mysql2/debug/src' && WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" gmake -k mysql2
    cd .. && /bin/sh ./config.status src/Makefile depfiles
    config.status: creating src/Makefile
    config.status: executing depfiles commands
    /bin/sh ../libtool --tag=CC --mode=link gcc -O0 -g3 -o mysql2 mysql2.o 
    gcc -O0 -g3 -o mysql2 mysql2.o 
    mysql2.o: In function `main':
    /home/jonas/daten/projekte/C++/mysql2/src/mysql2.c:14: undefined reference to `mysql_init'
    /home/jonas/daten/projekte/C++/mysql2/src/mysql2.c:21: undefined reference to `mysql_real_connect'
    /home/jonas/daten/projekte/C++/mysql2/src/mysql2.c:30: undefined reference to `mysql_error'
    /home/jonas/daten/projekte/C++/mysql2/src/mysql2.c:30: undefined reference to `mysql_errno'
    /home/jonas/daten/projekte/C++/mysql2/src/mysql2.c:39: undefined reference to `mysql_close'
    collect2: ld returned 1 exit status
    gmake: *** [mysql2] Fehler 1
    *** Beendet mit Status: 2 ***
    

    Die Link ist ja auch nur eine Link auf das Buch, das ich schon verwende.
    Aber trotzdem danke.
    Werd mir jetzt erstmal die MySQL-Bibliothek runterladen und neu kompilieren... vielleicht bringt das ja was.

    Danke,
    Jonas



  • okay, also ich hab das Problem so ziemlich behoben...
    Ich verwende einfach nicht KDevelop und es funktioniert.

    Jonas



  • Hier fehlt ein "-lmysql":

    gcc -O0 -g3 -o mysql2 mysql2.o



  • oder

    `mysql_config --libs`
    

Anmelden zum Antworten