2017-01-23 16 views
2

Ich bin mit Eclipse auf einer Debian-VM und Cross-Compile für einen Raspberry Pi Zero. Ich würde gerne die mraa-Bibliothek benutzen, aber nach stundenlangem Kampf kann ich immer noch nicht funktionieren. - Auf dem Ziel (Raspi Null) kann ich mraa lokal mit CMake kompilieren, einfach den Anweisungen des Autors folgend. Es funktioniert perfekt, wenn ich lokal mit einem C++ Beispiel spiele. - Auf dem Host habe ich die * .so-Dateien vom Ziel kopiert, aber der Cross-Compiler mag sie nicht (undefinierte Referenzfehler). In den Eclipse-Einstellungen habe ich das Header-Verzeichnis zum Include-Pfad, das Shared-Lib-Verzeichnis zum Bibliothekssuchpfad (-L) hinzugefügt und das Flag -lmraa hinzugefügt.Mein Cross-Compiler kann keine gemeinsame Bibliothek finden

Was mache ich falsch? Soll ich MRAA auf dem Host mit CMake kompilieren? Wenn ja, wie definiere ich meinen Cross-Compiler mit CMake?

+0

'aber der Cross-Compiler mag es nicht (undefinierte Referenzfehler)'. ** Undefinierter Verweis ** bedeutet, dass der Linker ** alle Bibliotheken ** gefunden hat, die dafür angegeben sind, aber keine dieser Bibliotheken enthält das erforderliche Symbol. Bitte bearbeiten Sie Ihre Frage und fügen Sie eine genaue Fehlermeldung ** hinzu. – Tsyvarev

+0

Beachten Sie, dass es dem Linker egal ist, warum er aufgerufen wird. 'cmake' kann bequem sein, aber es kann nicht zaubern. – MSalters

Antwort

0

Sorry für meine Frage nicht Bearbeitung früher, aber manchmal die Frage klar wird, nur, wenn Sie die Antwort finden ...

Im Grunde wollte ich eine Bibliothek verwenden (MRAA), für die ich den Quellcode hatte und eine cmake-Datei. Ich dachte, dass ich cmake einfach auf das Ziel (mein RasPi Zero) ausführen und dann die .so (shared libraries) -Dateien auf meinen Host übertragen könnte, um mit Eclipse zu kompilieren. Aber es hat nicht funktioniert.

Also habe ich stattdessen die Bibliothek mit cmake auf dem Host kompiliert. Damit es funktioniert, müssen Sie einen Link zu einem Cross-Compiler sowie einen Link zu einem Root-Dateisystem bereitstellen, das dem Ziel aufgrund aller Abhängigkeiten ähnelt. Also habe ich eine toolchain.cmake-Datei erstellt, um alles zu definieren und diese Toolchain-Datei als eine Option zu nennen, als ich cmake ausgeführt habe.

Alles wird hier erklärt: http://www.vtk.org/Wiki/CMake_Cross_Compiling

Die Cross-Compiler und das Root-Dateisystem finden Sie hier: https://github.com/raspberrypi/tools/tree/master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64

Und dies scheint der richtige Weg zu sein, jemand anderes zu verwenden, ist gemeinsam genutzte Bibliothek, wenn die kompilierte Version existiert nicht für Ihr Ziel (in meinem Fall ein Raspberry Pi Zero).

Verwandte Themen