LNK2019 in Verbindung mit einer Headerdatei für serielle Kommunikation(rs232.h)



  • Hallo liebe Community,

    vorab: Ich verwende Visual Studio 2015 Community mit dem standard Compiler.

    im Rahmen des schulischen Teil meines Fach Abiturs muss ich ein Abschlussprojekt einreichen. Mein Teamkollege und ich haben uns überlegt, ein Spiel zu Programmieren und dies mit einem selbst gebauten Joystick(mit Hilfe des ATMega 328P) zu steuern.
    Das Spiel(wir haben uns für ein Labyrinth entschieden, ist fertig und mit der Tastatur steuerbar.

    Entschuldigung wenn ich etwas zu weit ausgeholt hab - Jetzt kommt das Problem:
    Ich versuche nun, die Eingaben des Joysticks via USB, bzw. eines virtuellen, Seriellen COM Ports(COM3)auszulesen.

    Nach längerem Suchen im Internet habe ich folgende Headerdatei gefunden:
    http://www.teuniz.net/RS-232/
    Nun habe ich diese eingebunden, die Datei kann auch über den Include Befehel gefunden werden, also daran liegt es nicht. Allerdings bekomme ich folgenden Fehler beim kompilieren: LNK2019 unresolved externel symbol "extern C"[...]
    und LNK2028 unresolved token(0A0005CA) "extern C"[...]
    Bild zur Fehlermeldung:
    https://pl.vc/14gak

    Auch die Lehrkraft, die uns betreut, hat keine Ahnung woran es liegt.
    Hier mal der Quellcode des Testprojektes:

    //.::Include::.
    #include <iostream>
    #include <SFML/Graphics.hpp>
    #include <SFML/Keyboard.hpp>
    #include <cpp/rs232.h>
    
    //.::Makros::.
    #define isKeyPressed sf::Keyboard::isKeyPressed
    
    //.::Defines für die Serielle Kommunikation über USB::.
    #define BAUDRATE 9600
    #define COMPT 3
    #define BUFFERSZE 1000
    
    //.::Integer und andere Zahlenwerte::.
    int iDataPackOne; //Hier wird der Wert des ersten Datenpacketes geschrieben
    int iDataPackTwo; //Hier wird der Wert des zweiten Datenpacketes geschrieben
    int iFMB; //FirstMoveBit. Das erste Bit, dass später auf die Bewegung addiert wird
    float iX_Move = 0.01; //Bewegung Links/Rechts(X-Achse)
    float iY_Move = 0.01;//Bewegung Hoch/Runter(Y-Achse)
    
    int main(void)
    {
    	sf::RenderWindow mWindow(sf::VideoMode(800, 600, 32), "Movement-Engine Pre Alpha", sf::Style::Default);
    	mShape.setFillColor(sf::Color::Green);
    
    	RS232_OpenComport(COMPT, BAUDRATE, "8N1");(...)}
    

    Vielen Dank für eure Hilfe.

    Mit freundlichen Grüßen,

    Jonas



  • Sieht so aus als hättet ihr die rs232.c Datei vergessen. Die RS232 Library besteht nicht nur aus der Header Datei. Steht doch auch auf der Seite:

    Extract the file and copy rs232.h and rs232.c into your project directory.



  • Mist, danke xD
    Gott ich habs total vergessen xD Dankeschön 😃



  • So, jetzt habe ich versucht die C Datei einzubinden.
    Dabei kam leider dass:
    https://pl.vc/5a6ng

    Beim versuch, die C Datei in einem Win32 Projekt zu kompilieren kamen tausende Fehler:
    https://pl.vc/3pbmk

    //.::Include::.
    #include <iostream>
    #include <SFML/Graphics.hpp>
    #include <SFML/Keyboard.hpp>
    #include <windows.h>
    #include <cpp/rs232.h>
    #include "rs232.c"
    

    Sowohl ich als auch 2 meiner Lehrkräfte haben leider keine Idee was ich tun soll, außer die Frage hier noch einmal zu posten.

    Tut mir leid dass ich so oft nachfrage xD

    Vielen Dank,

    Jonas



  • Erstens kannst du den source wohl nicht als c++/cli und zweitens definierst du das _CRT_DISABLE... Dings, wie in den meldungen steht, am besten in den projekteinstellungen.



  • Warum ist /clr (Common Language Runtime-Kompilierung) gesetzt? Das ist nicht C++ sondern ein Microsoft Derivat und macht die Warnugen dann wohl auch zu Fehlern.

    #include "rs232.c" ? Bestimmt nicht



  • Das mit dem CLR bassiert auf der Recherche einer Lehrkraft, da ich vorher mit der .Net eigenen Version bzw. Klasse gearbeitet habe.

    Die #include "rs232.c" stammt von dem Versuchsidee einer weiteren Lehrkraft.

    Aber gut, dann werde ich ein neues Projekt machen, welches kein CLR Projekt ist. Danke für eure Hilfe 🙂



  • Um was für eine Art von 'Lehrkraft" handelt es sich? Professor, Infolehrer? Tritt ihr bitte heftig in den Hintern, denn was sie von #include redet ist murks. Sicher, dass du die .C-file includen sollst?



  • Elektrotechnik



  • Das Zitat von sebi707 um einen Satz ergänzt:

    Extract the file and copy rs232.h and rs232.c into your project directory.
    Include rs232.h in your program sourcecode (like: #include "rs232.h") and compile and link rs232.c (add rs232.c to your project).



  • Danke für eure Hilfe :3

    Werde das heute Abend, sobald ich zuhause bin, gleich mal versuchen^^



  • Abend 🙂
    Ich habs jetzt so gemacht wie hier beschrieben, diese Fehler kommen allerdings immernoch:

    https://pl.vc/4w3rg

    Irgendjemand eine Idee? Ich bin am verzweifeln <.<

    Lg,
    Jonas



  • Dieser Thread wurde von Moderator/in Arcoth aus dem Forum C++ (alle ISO-Standards) in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Lösung kurz und schmerzlos:
    Schreib

    #define _CRT_SECURE_NO_WARNINGS
    

    als allererste Zeile in die rs232.c Datei.

    Grundsätzlich ist es Sinnvoll, dieses Define ins Projekt aufzunehmen. Wird hoffentlich in der Hilfe beschrieben.

    Eigentlich sind dies auch nur Warnungen. Entweder sind das Intellisense Meldungen, dann solltest du in der Klappbox einfach mal auf Build umschalten, oder du hast irgendwo eingestellt, dass Warnungen zu Fehlern werden. Das würde ich abschalten.



  • Für zukünftige Fragen: Bilder der Fehlermeldung sind doof! Du kannst im Output-Tab den Meldungstext kopieren und hier einfügen. Wenn 100 gleche Meldungen kommen, interessiert nur die Erste.



  • So, jetzt habe ich mir das mal in VS angesehen. Wenn der Schalter /sdl (Enable Additional Security Checks) gesetzt ist, werden Warnungen bezüglich veralteter Funktionen (deprecated) zu Fehlern. D.h. also, entweder schaltest du diese Checks ab und bekommst nur noch Warnungen oder du setzt _CRT_SECURE_NO_WARNINGS ein.



  • Hmmm, eigentlich sollte der Hacken nicht gesetzt sein. Werde das heute Abend nochmal überprüfen, bzw. kann man das nachträglich abschalten in VS2015 oder muss ich dafür ein neues Projekt erstellen?



  • GhostPKP schrieb:

    Hmmm, eigentlich sollte der Hacken nicht gesetzt sein.

    Haken gibt's nur bei der Projekterzeugung

    GhostPKP schrieb:

    Werde das heute Abend nochmal überprüfen, bzw. kann man das nachträglich abschalten in VS2015 oder muss ich dafür ein neues Projekt erstellen?

    Das kann man alles in den Projekteigenschaften einstellen.



  • Perfekt, vielen viele Dank für eure Hilfe 😃

    Funktioniert alles^^

    Dankeschön 😃


Log in to reply