undefined reference

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,

    Mit diesem Code möchte ich über UART Schnitstelle ein Skript starten und wieder schliessen


    und sehe diese Fehlermeldungen:
    my_uart.c : (.text+0x14): undefined reference to "serialOpen"
    my_uart.c : (text+0+34):undefined reference to "serialGetchar"

    Was bedeutet das?
    Ein Problem mit der Bibliothek?

    Einmal editiert, zuletzt von Cool_pi (27. August 2014 um 18:24)

  • Also auf dieser Seite http://wiringpi.com/reference/serial-library/
    heißt die Funktion nicht

    Code
    serialOpen()

    , sondern

    Code
    int serialOpen()

    . Könnte es daran liegen, dass sie nicht erkannt wird?


    Aufruf mit

    Code
    gcc my_uart.c


    Auch

    Code
    gcc my_uart.c  -o my_uart

    und

    Code
    gcc my_uart.c -o my_uart -lm

    geben die gleichen Fehlermeldungen aus.
    Habe da was von einem .pro file gehört. Sind da die Libs gespeichert? Wie finde ich den?

    Einmal editiert, zuletzt von Cool_pi (27. August 2014 um 20:24)

  • Hi,

    Code
    gcc my_uart.c -o my_uart -lm


    ...

    vorab mal eine Frage: willst Du in Richtung Programmerstellung mehr machen?
    Dann empfehle ich Dir dringend mal darüber nachzudenken,
    a. welche Sprache Dir liegt bzw. Du lernen möchtest und
    b. Dich mit den Basics der entsprechenden Sprache vertraut zu machen.

    Zu Deinem Compiler-Aufruf:

    Code
    gcc my_uart.c -o my_uart -lwiringPi


    sollte funktionieren, vorausgesetzt Du hast die wiringPi Library korrekt installiert.

    cu,
    -ds-


  • Die Lib muss in diesen Ordner installiert werden?

    Welchen Ordner meinst Du?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Ok, die Lib habe ich dann installiert.

    Wenn ich das oben gepostete C Programm starte.

    Code
    gcc my_uart.c -o my_uart -lwiringPi


    Dann sehe ich keine Fehlermeldung, jedoch schließt sich das oben geposteter Code nach einer Sekunde von alleine ohne zu warten, dass ich eine Taste drücke. Sollte eigentlich mit "o" ein Skript gestartet werden.

    Einmal editiert, zuletzt von Cool_pi (27. August 2014 um 23:42)

  • Also mein Freund,
    verscheissern kann ich mich selber ...


    ...
    while (trigger =1 ){
    ...
    [/code]


    Ist das ein Vergleich? Wohl eher nicht ... das ist eine Zuweisung und die wird genau einmal ausgeführt ...


    ...
    input = serialGetchar (Uart_);
    case 'o':
    ...
    [/code]


    Wo bitte ist der switch() zum case?


    ...
    serialPuts(Uart_ );
    ...
    [/code]


    Das hast Du gleich zweimal drin. Da stimmt mit Sicherheit der Aufruf nicht. Was willst Du denn ausgeben?

    Der Source läuft garantiert nicht fehlerfrei durch den Compiler.
    Was für ein Programm willst Du denn da erzeugt haben :fies:

    cu,
    -ds-

  • Oh nein, habe den falschen Code hier gepostet. :(
    Probiere mal gleich den richtigen aus.

    Mit diesem Code soll der Pi Zeichen über eine UART Schnittstelle empfangen.
    Ich möchte über Hterm ein "o" an Pi schicken und dann soll ein Skript gestartet werden, mit einem "c" soll es wieder geschlossen werden.

  • Habe da eine allgemeine Frage

    mit gcc programm.c -o programm -lbib

    wird der Code nur kompiliert? Also muss der noch aufgerufen werden?
    Bei Codeblocks zum Beispiel ist das ein mehrstufiger Prozess vom Compilieren bis zum Ausführen.

    Macht man auf dem Pi jeden einzelnen Schritt per Hand oder besser einen Makefile erstellen?

    Habe es rausgefunden.

    Kompilieren

    Code
    gcc -o $ /dateipfad  $datei  -lbib


    Aufrufen

    Code
    ./$ /dateipfad


    Jetzt klappt es auch

    Einmal editiert, zuletzt von Cool_pi (28. August 2014 um 11:58)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!