C Kompilierung unter Linux



  • Guten Tag Leute,
    Ich hätte eine Frage zum Linken von Dateien unter Linux (Fedora17).
    Und zwar will ich eine Methode außerhalb einer Source-Datei verwenden,
    doch nach einem "$ make" und einem "$ gcc -o main main.c" im Terminal
    sagt mir der Compiler "undefined reference to 'print3'".
    Hier mal der Code der beiden Dateien:

    //syscalls.c
    
    #include <stdint.h>
    #include <stddef.h> /* for NULL */
    #include <inttypes.h>
    #include "syscalls.h"
    #include <stdio.h>
    
    void print3( char a, uint8_t b, int8_t c )
    {
    	printf( "%c %" PRIu8 " %" PRId8 "\n", a, b, c );
    }
    
    //main.c
    
    #include "syscalls.h"
    #include <stdio.h>
    #include <stdint.h>
    #include <inttypes.h>
    
    void print3( char a, uint8_t b, int8_t c );
    
    int main()
    {
    
    	char a = 'a';
    	uint8_t b = -14;
    	int8_t c = 17;
    	print3(a, b, c);
    	return 0;
    }
    

    Und die Header-Datei von sysscalls.c wenn nötig:

    #ifndef SYSCALLS_H
    #define SYSCALLS_H
    
    #include <stdint.h>
    
    void print3( char a, uint8_t b, int8_t c );
    
    #endif
    

    Wäre nett wenn mir jemand verraten würde wieso der Compiler der main() nicht
    erlaubt print3 auszuführen.
    MfG



  • gcc -o main main.c syscalls.c



  • Ich hab zwar keine Ahnung von Linux, aber ich sehe nicht, wo Du die syscalls dazulinkst?!

    Probier doch mal:

    "$ gcc -o main main.c syscalls.c"



  • Oh gut es funktioniert, vielen Dank.

    PS: syscalls hieß die Datei, weil noch andere Methoden drin sind in denen dann syscalls verwendet werden, die ich aber noch nicht bearbeitet habe. 🙂


Anmelden zum Antworten