Hallo, ich habe eine Kamera Slider Projekt nachgebaut. (open source) Der Slider wird über den Seriellen Monitor oder per Bluetooth über das Handy über eine Konsole bewegt. Das geht auch einwandfrei. Jetzt hat der Ersteller aber einen Xbox Controller für die Steuerung benutzt, dazu hat er eine main.cpp Datei mitgegeben. Dieser Code soll auf dem Rechner laufen, die Befehle vom Controller entgegen nehmen und dann irgendwie Seriell an den Arduino senden. Da liegt aber mein Problem, ich weis nicht mal welche Vorlage ich im Visual Studio nehmen muss.... Konsolen-app Windows-Desktopassistent oder was auch immer. Muss ich den Code überhaupt im Visual Studio öffnen? Wenn ich den Code mit rechtsklick öffnen mit Visual Studio öffne und auf ausführen drücke will er dass ich es irgendwo anhänge und zeigt mir sämtliche .exe auf meinem Rechner an. Ich bin da überfordert, kann mir hier einer Tipps geben ? Ich hänge mal den Code an und das ganze Projekt verlinke ich . Ganzes Projekt: https://github.com/isaac879/Pan-Tilt-Mount Xbox Controller Code:
:
Verschoben durch Moderator
Vor dem Ausführen musst du deinen Sourcecode noch kompilieren. Hast du einen C++-Compiler im Visual Studio eingepflegt?
Pascal B. schrieb: > ich weis nicht mal welche Vorlage ich im > Visual Studio nehmen muss.... Konsolen-app Windows-Desktopassistent oder > was auch immer. Visual Studio ist nichts für Anfänger. Zwar geht alles ganz simpel auf Knopfdruck, aber es gibt zu viele Knöpfe. Nimm stattdessen Visual Studio Code, das ist ein völlig anderes Produkt. Dann such im Netz ein Tutorial dazu. > Muss ich den Code überhaupt im Visual Studio öffnen? Wenn du ihn nicht ändern oder lesen willst, musst du ihn nirgendwo öffnen. Aber du musst ihn compilieren, dabei wird eine EXE-Datei erzeugt, die lässt sich dann (hoffentlich) ausführen.
Pascal B. schrieb: > Da liegt aber mein Problem, ich weis nicht mal welche Vorlage ich im > Visual Studio nehmen muss.... Konsolen-app Windows-Desktopassistent oder > was auch immer. Der Code sieht danach aus, dass er als C++-Konsolen-Anwendung für Windows gedacht ist. Das solltest du also in Visual Studio als Vorlage verwenden, dann den dortigen Code durch diesen ersetzen. Dann kannst du versuchen, das Projekt zu bauen, um ein .exe-File daraus zu generieren. Sebastian R. schrieb: > Hast du einen C++-Compiler im Visual Studio eingepflegt? Ist sowas nicht bei Visual Studio dabei? Rolf schrieb: > Nimm stattdessen Visual Studio Code, das ist ein völlig anderes Produkt. Bei dem ist definitiv kein Compiler dabei. Man braucht also erst mal zusätzlich noch eine Compiler-Toolchain und muss sich dann selbst darum kümmern, wie man die verwendet, um das Programm zu bauen. Das dürfte für einen Anfänger, der nur aus fertigem Code was ausführbares machen will, deutlich schwieriger sein.
Rolf schrieb: > Visual Studio ist nichts für Anfänger. Zwar geht alles ganz simpel auf > Knopfdruck, aber es gibt zu viele Knöpfe. Nimm stattdessen Visual Studio > Code, das ist ein völlig anderes Produkt. Visual Studio Code ist ein Editor, keine IDE. Da musst du die ganzen Knöpfe, die das Studio automatisch für dich drückt, erst einmal manuell anlegen, damit dann hinten irgendwo ein compiliertes Windowsprogramm rauskommt. DAS ist definitiv nichts für Anfänger. Oliver
Danke erstmal für die Hilfeversuche, Ja bei Studio ist der Compiler dabei, bei dem VS Code nicht. Dennoch habe ich mir jetzt das VS Code angeschaut und 2 verschiedene Compiler eingerichtet. Leide bin ich nicht weiter gekommen. Ich gehe ja stark davon aus dass der Code funktioniert, erstens weil er den Controller ja im Video benutzt und zweitens weil bei dem Projekt alles gut durchdacht ist und bisher alles von ihm funktioniert hatte. Jetzt musste ich aber im VSCode #include <math.h> hinzufügenen und jetzt mekert er bei undefined reference to `XInputGetState' dwResult = XInputGetState(i, &state); //Simply get the state of the controller from XInput. obwohl der Befehl ja selbst auf der Windows Seite so steht . Ich glaube das Problem liegt bei mir und nicht am Code, evtl könnte einer von euch der mehr Erfahrung hat mal versuchen den Code zu Compilern?
Pascal B. schrieb: > Jetzt musste ich aber im VSCode > #include <math.h> > hinzufügenen und jetzt mekert er bei > undefined reference to `XInputGetState' Das hat beides sicher nicht direkt etwas miteinander zu tun. Vor dem Include von math.h wird es sicher auch schon reichlich Fehler gegeben haben. Das Includen von math.h hat sehr wahrscheinlich nur dafür gesorgt, dass der Compiler bei seiner Arbeit etwas weiter kommt und damit die nächsten Fehler überhaupt erst sichtbar werden. Ohne die math.h hat er halt schon füher wegen Hoffnungslosigkeit abgebrochen... Die fehlende Funktion ist übrigens in xinput.h deklariert. Ist die in der C-Datei included, wo sie benutzt wird? Und: Kann der Linker die lib finden, die diese Funktion enthält?
Scheinbar findet er sie. In vs Studio kann ich den Code auch ohne math.h ausführen,nur will er da wie gesagt dass ich es an eine exe anhänge. Ich hab dann mal die arduino IDE gewählt und irgendwas läuft dann . Allerdings passiert nichts weitet. Weder wenn ich am Controller was mache noch diese text Ausgaben ....
Ob S. schrieb: > Die fehlende Funktion ist übrigens in xinput.h deklariert. Ist die in > der C-Datei included, wo sie benutzt wird? > Und: Kann der Linker die lib finden, die diese Funktion enthält? Ein „undefined reference“ ist üblicherweise ein linkerfehler. Was dann zu der Frage führt, welcher Compiler da wie und wo installiert wurde. Oliver
:
Bearbeitet durch User
Oliver S. schrieb: > Ein „undefined reference“ ist üblicherweise ein linkerfehler. Jepp. Vorher führt das höchstens zu einer Warnung bzgl. impliziter Deklaration (wenn halt die entsprechende *.h nicht included ist). > Was dann > zu der Frage führt, welcher Compiler da wie und wo installiert wurde. Und wohl auch: Was eigentlich das Target sein soll...
Ob S. schrieb: > Oliver S. schrieb: >> Ein „undefined reference“ ist üblicherweise ein linkerfehler. > > Jepp. Vorher führt das höchstens zu einer Warnung bzgl. impliziter > Deklaration (wenn halt die entsprechende *.h nicht included ist). Nein. Das ist ein Fehler den der Compiler schon anmeckert (wenn die Deklarieration fehlt).
:
Bearbeitet durch User
vielleicht sollten wir bei visual Studio 2022 bleiben, denn da komme ich denke ich weiter. Ich habe nun mal Bilder gemacht. Ich habe die main.cpp mir rechtsklick öffnen mit geöffnet. Leider weis ich nicht was der mit anhängen will und auch nicht wo die Textausgaben wie z.b. " Controller nicht verbunden" kommen sollten. Jedenfalls macht er da mal irgendwas.
Mit Anfügen (Attach) wird der Debugger an den Ausgewählten Prozess angehängt, das möchtest du nicht. Da muss das Erstellen des Projektes ausgewählt werden, eventuell sind die Projekteinstellungen falsch. War da keine .sln bei oder ein makefile oder CMakeLists.txt?
Oliver S. schrieb: > Visual Studio Code ist ein Editor, keine IDE. Da musst du die ganzen > Knöpfe, die das Studio automatisch für dich drückt, erst einmal manuell > anlegen, damit dann hinten irgendwo ein compiliertes Windowsprogramm > rauskommt. Ach so, ja: Du musst noch eine Extension installieren. Die Extensions-Liste zeigt VS Code an. Dann ist es kaum mehr als ein Klick und schon hast du eine IDE. > DAS ist definitiv nichts für Anfänger. Ich hatte ja "Tutorial" gesagt. Dieses zum Beispiel: https://code.visualstudio.com/docs/cpp/config-msvc
J. S. schrieb: > Nein. Das ist ein Fehler den der Compiler schon anmeckert (wenn die > Deklarieration fehlt). Das kommt auf die Compiler-Optionen an. Und die konkrete Fehlermeldung oder -warnung hängt natürlich auch vom Compiler ab. Um also genaueres sagen zu können, müsste man erstmal wissen, welchen der TO eigentlich verwendet...
J. S. schrieb: >> Ein „undefined reference“ ist üblicherweise ein linkerfehler. > Nein. Das ist ein Fehler den der Compiler schon anmeckert (wenn die > Deklarieration fehlt). Es gibt auch implizite Deklarationen. Wie der Compiler das handhabt, kommt auf seine Einstellungen an. Und wenn man z. B. eine "extern" Deklaration in einer .cpp hat, merkt es erst der Linker, wenn eine fehlende Definition fehlt. Und was sagt der dann? Richtig, er sagt (sinngemäß) "undefined reference", was sonst?
deshalb steht da in Klammern 'wenn die Deklaration fehlt'. Es ist ein .cpp Datei die damit üblicherweise als C++ Quelle übersetzt wird, und da ist eine fehlende Deklaration ein Fehler und keine Warnung. Und schon das ist ein großer Vorteil bei C++ das es in der Sprache so festgelegt ist, nix Compileroption.
Pascal B. schrieb: > Ich hänge mal den Code an und das ganze Projekt verlinke ich . > Ganzes Projekt: > https://github.com/isaac879/Pan-Tilt-Mount ok, da sind keine weiteren Projektdateien oder makefiles drin. Es gibt ein anderes YT Video wo im 2. Teil die SW beschrieben werden sollte, das ist aber nie erschienen. Edit: in einem der Issues im Repo wird auf ein Python Projekt verwiesen, das könnte da einfacher zu benutzen sein. Zu dem Windows Programm gab es nie Anweisungen. https://github.com/cbradburne/Pan-Tilt-Mount-App
:
Bearbeitet durch User
nun, ich danke euch allen wirklich herzlich für die versuchte Hilfe!Scheinbar kann aber auch von euch keiner was mit der main.cpp anfangen. Der Slider funktioniert wirklich gut und steht auch fertig aufgebaut neben mir. Allerdings ohne externen Controller für mich "fast "unbrauchbar weil die Konsole Steuerung(und ds auch noch per handy) echt nervig ist! D.h. wir (eher Ich) brauchen einen der Ahnung von sowas hat. Wenn dass einer über TeamViewer o.ä machen kann ist das auch kein Problem, muss auch nicht umsonst sein. Danke euch.
Beachte diese Zeile im Quelltext, und den Kommentar dahinter.
1 | //#pragma comment(lib, "XInput.lib") // Library. If your compiler doesn't support this type of lib include change to the corresponding one
|
Entweder die Zeile aktivieren, wenn dein Compiler das unterstützt, oder XInput eben über Projektoptionen, Linker-Commandozeile, Makefile-Variable o.Ä. hinzulinken.
ja, hab ich gelesen. Aber die XInput hat er doch und meckert auch nicht .
Ich habe aus deinem Code mal eine exe gebaut. Schau mal ob es das macht was du erwartest. Gruß, f
ich habe auch nochmal probiert das zu übersetzen, es geht mit VSC, braucht aber den MSC Compiler aus dem VS. In einer VS Developer Shell den VSC mit 'code' starten, dann das main.cpp laden. Durch Debugger starten wird eine Compiler Task erzeugt und gestartet. Jetzt war noch nötig die 'User32.lib' genau wie die 'Xinput.lib' über das pragma auch dem Linker bekannt zu machen. Ich habe es mit einem PS3 Controller probiert, dazu sind noch Treiber https://github.com/nefarius/ScpToolkit/releases/tag/v1.6.238.16010 nötig. Ich habe keinen Arduino dran, aber mal die Aufrufe von panTiltInit() und printIncomingData() auskommentiert, dann läuft eine Ausgabe einiger Inputs durch und die werden auch mit dem linken Joystick verändert. Cooles Projekt, finde ich auch sehr interessant. Es müsste auch mit dem llvm/clang zu übersetzen sein, ich hatte mal mit CMake eine Konfig erzeugt und ein einfaches Konsolenprogramm übersetzt, ging auch. Nur MS erlaubt nicht dafür die CPP Extension zu benutzen, ein Hinweis kommt beim Debugger starten. Vielleicht fehlt daher auch was im Repo. Aber den VS für C++ gibt es afaik ja auch als kostenlose Community Edition.
:
Bearbeitet durch User
besteht irgendwie die Möglichkeit dass du es bei mit über TeamViewer auch ans laufen bringst? Ich würde dann alles vorbereiten (dateien,programme usw.) Und Frank, die Exe kann ich nicht öffnen weil Windows meckert es sei ein Virus.
Pascal B. schrieb: [...] > Und Frank, die Exe kann ich nicht öffnen weil Windows meckert es sei ein > Virus. Ist ja lustig :-) Das ist die main.cpp aus deinem ersten Beitrag, ergänzt um ein weiteres #pragma für User32.lib, compiliert mit dem MSVC-BuildTools 2019 'cl' für eine x64 Zielplatform. Es ist halt nicht signiert. Evtl. stört sich Windows daran. Gruß, f
Ja Frank, das soll kein Vorwurf oder sowas sein. Wollte nur sagen dass ich die leider nicht testen kann.
Keine Sorge, ich habe das nicht als Vorwurf aufgefasst. Vielleicht kann dir Jojos ja weiterhelfen, der scheint ja auch einen XBox-Controller zu haben und an dem Projekt interessiert zu sein. Ich habe lediglich den Code durch den Compiler gejagt und kann weiter nichts tun da ich die notwendige Hardware gar nicht habe. Gruß, f
J. S. schrieb: > Ob S. schrieb: >> Oliver S. schrieb: >>> Ein „undefined reference“ ist üblicherweise ein linkerfehler. >> >> Jepp. Vorher führt das höchstens zu einer Warnung bzgl. impliziter >> Deklaration (wenn halt die entsprechende *.h nicht included ist). > > Nein. Das ist ein Fehler den der Compiler schon anmeckert (wenn die > Deklarieration fehlt). Die Compilerbauer geben sich sehr viel Mühe, eindeutige und unverwechselbare Fehlermeldungen zu erzeugen. Eine fehlende Definition gibt ein unknown oder undefined function vom Compiler, der Linker wirft das undefined reference bei fehlendem Symbol. Wenn der TO das also richtig hingeschrieben hat, wars der linker. Olivet
:
Bearbeitet durch User
Oliver S. schrieb: > Wenn der TO das also richtig hingeschrieben hat, wars der linker. MS-Compiler geben zusätzlich zum Klartext der Fehlermeldung auch eine eindeutige Nummer mit einem Buchstabenkürzel davor. Hier entweder LNK2001 (unresolved external symbol "symbol") oder LNK2019 (unresolved external symbol 'symbol' referenced in function 'function').
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.