Chaosmango Geschrieben September 5, 2016 at 08:36 Geschrieben September 5, 2016 at 08:36 Hallo ich hab immer das Problem, das die Beispielprogramme sich mit Visual C++ nicht korrekt kompilieren lassen. Weiß hier jemand abhilfe, wo ich den Haken setzen kann, das er C Code oder so auch akzeptiert? Zitieren
FlyingDoc Geschrieben September 5, 2016 at 08:48 Geschrieben September 5, 2016 at 08:48 Ich habe ganz einfach alle Dateiendungen ".c" der Includes einfach in ".cpp" umbenannt. Schon wird alles aktzeptiert. Zitieren
Chaosmango Geschrieben September 5, 2016 at 09:39 Autor Geschrieben September 5, 2016 at 09:39 Ich kopiere mir den Quellcode ja raus und speichere es dann als *.cpp ab... funktioniert aber irgendwie dann trotzdem nicht. Zitieren
photron Geschrieben September 5, 2016 at 10:10 Geschrieben September 5, 2016 at 10:10 Welche Fehlermeldung bekommst du denn? Du musst das Problem schon genauer beschreiben. Meine Glaskugel ist gerade zur Inspektion Zitieren
Chaosmango Geschrieben September 5, 2016 at 15:56 Autor Geschrieben September 5, 2016 at 15:56 Also ich verwende Microsoft Visual C++ 2010 V:10.0.4... SP1 Ich will z.b. dieses Programm kompilieren: https://raw.githubusercontent.com/Tinkerforge/oled-128x64-bricklet/master/software/examples/c/example_hello_world.c und bekommen das: 1>------ Build started: Project: Test, Configuration: Debug Win32 ------ 1> OLED.cpp 1>OLED.obj : error LNK2001: unresolved external symbol _ipcon_destroy 1>OLED.obj : error LNK2001: unresolved external symbol _oled_128x64_destroy 1>OLED.obj : error LNK2001: unresolved external symbol _oled_128x64_write_line 1>OLED.obj : error LNK2001: unresolved external symbol _oled_128x64_clear_display 1>OLED.obj : error LNK2001: unresolved external symbol _ipcon_connect 1>OLED.obj : error LNK2001: unresolved external symbol _oled_128x64_create 1>OLED.obj : error LNK2001: unresolved external symbol _ipcon_create 1>C:\Users\XYZ\Downloads\tinkerforge_c_bindings_2_1_11\example_project\Debug\Test.exe : fatal error LNK1120: 7 unresolved externals ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== Zitieren
photron Geschrieben September 5, 2016 at 16:04 Geschrieben September 5, 2016 at 16:04 Du musst deinem Projekt auch noch die ip_connection.c und die bricklet_oled_128x64.c Datei hinzufügen. Zitieren
Chaosmango Geschrieben September 5, 2016 at 19:01 Autor Geschrieben September 5, 2016 at 19:01 Okay. Danke. Jetzt hab ich die Test.exe Jetzt lade ich sie hoch in den RedBrick und bekomme die Meldung: :o 2015-07-09T02:00:04.748324+0200 ------------------------------------------------------------------------------- ./Test.exe: ./Test.exe: cannot execute binary file Zitieren
Nic Geschrieben September 5, 2016 at 23:49 Geschrieben September 5, 2016 at 23:49 Die Exe wird vermutl. nur auf einem Win Arch. lauffähig sein. Auf dem Red ist aber eine Arm Cpu, du solltest nur die Projekt Sourcen hochladen und auf dem Red kompilieren. Zitieren
Chaosmango Geschrieben September 6, 2016 at 06:04 Autor Geschrieben September 6, 2016 at 06:04 http://www.tinkerforge.com/de/doc/Software/API_Bindings_C.html#api-bindings-c Aber hier ist doch immer die rede von einem Windowssystem wo die exe kompiliert wird oder verstehe ich das falsch? Zitieren
FlyingDoc Geschrieben September 6, 2016 at 06:19 Geschrieben September 6, 2016 at 06:19 Um dein Programm auf dem RED laufen zu lassen musst du es auch auf dem RED compilieren. Auf dem RED läuft kein Windows sonder ein Linux. Genau gesagt Debian Linux. Du musst dein Programmprojekt im BrickViewer auf den RED hochladen und dann compilieren. Siehe hier. Zitieren
Chaosmango Geschrieben September 6, 2016 at 06:26 Autor Geschrieben September 6, 2016 at 06:26 Das heisst, ich lade die ip_connection.cpp bricklet_oled_128x64.cpp oled.cpp (eigene Datei) hoch und lass es dort compilieren? die Header Dateien sollte er ja haben oder? Zitieren
photron Geschrieben September 6, 2016 at 07:34 Geschrieben September 6, 2016 at 07:34 Siehe http://www.tinkerforge.com/de/doc/Hardware/Bricks/RED_Brick_Program_Tab.html#c-c Speichere folgendes als Textdatei namens Makefile: # Defines CC=g++ CFLAGS=-c -Wall -I/usr/include/tinkerforge LIBS=-ltinkerforge -lpthread EXE=oled SOURCES=oled.cpp OBJECTS=$(SOURCES:.cpp=.o) # Build Rules all: $(SOURCES) $(EXE) .cpp.o: $(CC) $(CFLAGS) $< -o $@ $(EXE): $(OBJECTS) $(CC) $(OBJECTS) -o $(EXE) $(LIBS) clean: rm -f *.o $(EXE) Und lad es zusammen mit oled.cpp als C/C++ Programm auf den RED Brick. die anderen Dateien hat der RED Brick schon. Bei Schritt 3 trägst du oled als Executable ein und setzt den Haken bei "Compile From Source". Den Rest der Einstellungen kannst du dann so lassen. Zitieren
Chaosmango Geschrieben September 6, 2016 at 17:41 Autor Geschrieben September 6, 2016 at 17:41 argh... ich fress bald nen Besen... kann doch net sein... Das kommt jetzt nach dem hochladen... Defining new program... ...done Setting custom options... ...done Uploading C:\Users\XYZ\Downloads\tinkerforge_c_bindings_2_1_11\example_project\oled.cpp... ...done Uploading C:\Users\XYZ\Downloads\tinkerforge_c_bindings_2_1_11\makefile.txt... ...done Setting command... ...done Setting more custom options... ...done Setting stdio redirection... ...done Executing make... make: *** No targets specified and no makefile found. Stop. ...warning: Could not compile source code Upload finished with 1 warning! Zitieren
Chaosmango Geschrieben September 6, 2016 at 19:15 Autor Geschrieben September 6, 2016 at 19:15 Okay makefile Problem gelöst... war keine TXT file sondern ohne Endung... so nach langen hin und her bin ich jetzt soweit... Executing make... g++ -c -Wall -I/usr/include/tinkerforge oled.cpp -o oled.o g++ oled.o -o oled -ltinkerforge -lpthread oled.o: In function `draw_matrix(_Device*, bool (*) [128])': oled.cpp:(.text+0xe2): undefined reference to `oled_128x64_new_window' oled.cpp:(.text+0x10e): undefined reference to `oled_128x64_write' oled.o: In function `main': oled.cpp:(.text+0x170): undefined reference to `oled_128x64_create' oled.cpp:(.text+0x1bc): undefined reference to `oled_128x64_clear_display' oled.cpp:(.text+0x2c4): undefined reference to `oled_128x64_destroy' collect2: error: ld returned 1 exit status makefile:16: recipe for target 'oled' failed make: *** [oled] Error 1 ...warning: Could not compile source code Upload finished with 1 warning! Kann ich irgendwi mein Dateiverzeichnis sehen? Zitieren
Chaosmango Geschrieben September 6, 2016 at 21:19 Autor Geschrieben September 6, 2016 at 21:19 So also Servo funktioniert... warum der Oled nicht geht weiss ich jetzt auch... die Header-Datei ist auf dem RedBrick nicht vorhanden... Wie bekomme ich die dorthin? bzw. ist diese nicht normalerweise installiert? Zitieren
FlyingDoc Geschrieben September 6, 2016 at 21:48 Geschrieben September 6, 2016 at 21:48 Lade sie einfach in dein Quellcodeverzeichnisses deones Programmes auf dem RED mit hoch. Dann wird er sie finden. Zitieren
Chaosmango Geschrieben September 7, 2016 at 04:04 Autor Geschrieben September 7, 2016 at 04:04 Hätte ich schon probiert... dann bringt er die Fehlermeldung beim kompilieren. Weil er ja laut makefile im Verzeichnis sucht... Zitieren
Chaosmango Geschrieben September 7, 2016 at 12:47 Autor Geschrieben September 7, 2016 at 12:47 Gibt es die Möglichkeit von A nach B was zu kopieren mit der Brick Console? Weil das neue Image hab ich auf die Karte gezogen... hat aber nix gebracht. Zitieren
photron Geschrieben September 7, 2016 at 13:14 Geschrieben September 7, 2016 at 13:14 Führe mal folgende Befehle in der RED Brick Console aus (benötigt Internetverbindung): sudo -s cd /usr/tinkerforge/bindings wget http://download.tinkerforge.com/bindings/c/tinkerforge_c_bindings_latest.zip unzip -q -d c tinkerforge_c_bindings_latest.zip cd c/source/ make prefix=/usr make install exit Danach solltest du aktuelle C/C++ Bindings auf dem RED Brick haben. Nachtrag: Das RED Brick Image 1.8 hat C/C++ Bindings die neu genug für das LED 128x64 Bricklet sind. Ich habe es gerade getestet und es funktioniert genauso wie beschrieben. Laut deiner make Ausgabe fehlt der Header nicht. Sondern Symbole/Funktionen in libtinkerforge.a. Das ergibt aber keinen Sinn. Du kannst dennoch versuchen die C/C++ Binding wie beschrieben zu aktualisieren. In der Console kannst du mit "cp <src> <dst>" kopieren. Je nachdem wohin zu kopieren willst muss du das als Root machen: "sudo cp <src> <dst>" Zitieren
Chaosmango Geschrieben September 7, 2016 at 18:14 Autor Geschrieben September 7, 2016 at 18:14 So jetzt hab ich glaub ich herausgefunden, warum das nicht funktioniert... Mal genauer hinschauen würde viel nützen... Im Brick Viewer steht Image Version 1.6 (full Version) :o :o So jetzt ist auf der Karte seit gestern das Image von 1.8 - leider finde ich nicht wie ich das Image installieren kann... Zitieren
FlyingDoc Geschrieben September 7, 2016 at 20:32 Geschrieben September 7, 2016 at 20:32 Gugsd du ==>hier !!! Zitieren
Chaosmango Geschrieben September 7, 2016 at 20:38 Autor Geschrieben September 7, 2016 at 20:38 Ja das ist schon klar. Die mmc wurde mit dem Image 1.8 beschrieben unter Windows mit dem Image Programm so wie beschrieben. Nur leider zeigt er immer noch an das der Red brick die Version 1.6 hat. Deswegen die Frage ob bzw. wie man das Image installiert, wenn man es überhaupt braucht... Zitieren
Chaosmango Geschrieben September 8, 2016 at 08:16 Autor Geschrieben September 8, 2016 at 08:16 Aber Theoretisch nimmt er ja die Speicherkarte zum laden? Musste eh was bestellen, hab mir nochmal eine Karte mit bestellt -> dort ist ja das aktuelle Image vorhanden oder? Dann probiere ich es damit nochmal. Zitieren
photron Geschrieben September 8, 2016 at 09:00 Geschrieben September 8, 2016 at 09:00 Du musst das Image nur auf die Speicherkarte schreiben, das ist alles. Wenn danach der RED Brick immer noch als 1.6 im Brick Viewer angezeigt wird, du aber 1.8 auf die Karte geschrieben hast, dann hat das Schreiben aus irgendwelchen Gründen nicht geklappt. Zitieren
Chaosmango Geschrieben September 8, 2016 at 09:11 Autor Geschrieben September 8, 2016 at 09:11 Ich hab es zweimal gemacht und immer ohne Fehler geschrieben... Irgendwie ist hier der Wurm drin... Sorry Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.