-
        

Ergebnis 1 bis 8 von 8

Thema: Fehler beim compilieren !??!

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.10.2006
    Beiträge
    6

    Fehler beim compilieren !??!

    Anzeige

    Hallo Leute,
    um ein LCD anzusteuern habe ich mir die Libary von Peter Fleuy geholt. Sein Beispielprogramm kann ich ohne Probleme compilieren.

    Nun benutze ich das Beispielprogramm von:

    http://www.roboternetz.de/wissen/ind...D-Modul_am_AVR

    AVR-GCC Programm
    Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode. Verwendet wird die lcdlibrary von Peter Fleury.

    Code:
    #include <stdlib.h>
    #include <avr/io.h>
    #include "lcd.h"
    
    int main(void)
    {
    
        /* Initialisiere Display, Cursor aus */
        lcd_init(LCD_DISP_ON);
    
        /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */
        lcd_clrscr();
            
        /* String auf Display anzeigen */
        lcd_puts("Hello world.");
    }
    Ich erzeuge mir das passende makefile, kopiere alle includes in den Ordner von main.c dann versuche ich zu kompilieren. (make all)

    Da tut sich dann der Fehler auf:

    Code:
    > "make.exe" all
    
    -------- begin --------
    avr-gcc (GCC) 4.1.1 (WinAVR 20070122)
    Copyright (C) 2006 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    
    Linking: main.elf
    avr-gcc -mmcu=atmega128 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.o  -std=gnu99 -Wundef -MMD -MP -MF .dep/main.elf.d main.o --output main.elf -Wl,-Map=main.map,--cref     -lm
    main.o: In function `main':
    C:\Dokumente und Einstellungen\Marius\Desktop\RTCaC-Projekt\Code\LCD_Test_1/main.c:28: undefined reference to `lcd_init'
    C:\Dokumente und Einstellungen\Marius\Desktop\RTCaC-Projekt\Code\LCD_Test_1/main.c:33: undefined reference to `lcd_clrscr'
    C:\Dokumente und Einstellungen\Marius\Desktop\RTCaC-Projekt\Code\LCD_Test_1/main.c:36: undefined reference to `lcd_puts'
    make.exe: *** [main.elf] Error 1
    
    > Process Exit Code: 2
    Selbst wenn ich #include "lcd.h" und die andern includes weglasse und den code in die main.c hineinkopiere ändert das nichts.

    Was kann ich machen? Wo liegt der Fehler?

    Warum schreibt man eigentlich hier #include "lcd.h" und nicht #include <lcd.h>?

    Ich hoffe auf eure Hilfe!

    Vielen dank .....

    m&m

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.01.2006
    Ort
    Mönchengladbach
    Beiträge
    544
    Hi M&M,
    wenn ich das richig sehe, dann linkst du ja garnicht die LIB dazu. Dann kann der Linker ja nicht die Symbole finden... die befinden sich ja in der Fleury LIB.
    Du musst die LIB seperat Übersetzen (nicht linken, also "-c") und das Object-File dann zu deinem Programm linken.

    #inlcude "irgendwas" bedeutet, daß der Präprozessor die Datei im aktuellen Verzeichniss suchen soll.
    Bei #include<irgendwas> wird zuerst in den standard Include-Path gesucht.

    Gruß,
    SIGINT

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    08.10.2006
    Beiträge
    6
    Hi SIGINT,
    danke erstmal für die Antwort.

    Ich bin noch nicht so fest in der Materie ... wie genau übersetzte ich die LIB? Was meinst du mit "-c"?

    Gruß
    m&m

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    Hi M&M,
    also ich bin zwar auch noch n fast-noob auf dem Bereich programmieren, aber ich glaub, er meint sowas:

    Code:
     
    //sämtliche header
    
    
    #define loadlib
    
    void lib_laden(); 
    void lib_schliessen(); 
    
    HINSTANCE hLib; 
    inpfuncPtr inp32; // das
    oupfuncPtr oup32; //und das ist ein Befehl, der mit der inpout32.dll 
     //deklariert (sagt man das so?) wird (halt da drin steht, was der compiler 
     //damit anfangen soll)
    
    void lib_laden () 
    { 
    hLib = LoadLibrary("inpout32.dll");  
    inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32"); 
    oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32"); 
    if (hLib == NULL || inp32 == NULL || oup32 == NULL)  { cout << " Fehler beim Laden von inpout32.dll " << '\n'; }/*** ERROR ***/ 
    } 
    
    // auch alles nur n beispiel für inpout32.dll, des if{hlib ==....} hat zur 
    //funktion, das n error ausgegeben wird
    
    int main()
    {
    //hauptprogramm
    
    return0 //oder ähnliches
    }
    
    //evtl definitionen von Booleschen ausdrücken/...
    
    
    void lib_schliessen() 
    { 
    FreeLibrary(hLib); 
    }
    EDIT: achso, ja, ging ja um nen AVR-Controller, bei dem geht sowas leider net.......... schade

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.01.2006
    Ort
    Mönchengladbach
    Beiträge
    544
    @AlKI:
    Nein, das ist nur bei DLLs unter Windows einsetzbar...
    hier geht es um eine LCD-Library für einen AVR Controller.

    @m&m:
    Ich übersetze meine Programme immer "von Hand", da ich mich noch nicht wirklich mit makefiles auskenne. Aber ich Glaube es reicht, wenn du im Makefile bei SRC noch lcd.c einträgst.
    Dann sollte sowas da stehen:
    Code:
    SRC=lcd.c main.c
    Gruß,
    SIGINT

    P.S.: Die Header-Dateien (*.h) dienen nur dazu dem Compiler alle Funktionen und Datentypen bekannt zu machen, bevor der eigentliche Programmtext übersetzt wird. Du müsstest also zusätzlich zur Headerdatei noch die eigentliche Implementierung (die *.c-Datei) der LCD-Lib in deinen Quelltext kopieren, damit du das Programm übersetzen kannst. Das ist aber nicht unproblematisch und zudem bei größeren Projekten sehr unpraktisch.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    08.10.2006
    Beiträge
    6
    @SIGINT:

    alter schwede! das war es! vielen dank!

    @AIKI:

    auch dir danke für die bemühungen! Hoffe, ich kann auch irgendwann euch mal aus der Patsche helfen!

    Ein schönes Wochenende euch und Prost!

    Greez
    m&m

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.01.2006
    Ort
    Mönchengladbach
    Beiträge
    544
    Gleichfalls ein schönes Wochenende....

    Gruß,
    SIGINT

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    N'aaaaaaaabnd
    Ich schließe mich an, schön, dass es funktioniert, auch wenn ich wohl keine große Hilfe war.........
    Gruß, AlKi

    Jeder Mensch lebt wie ein Uhrwerk, wie ein Computer programmiert...
    ==> UMPROGRAMMIEREN!

    Kubuntu

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •