Google protocol buffers cross-Compilierung
Meine Probleme mit Google protocol buffers hat zwei Teile, eines ist über compiler-Optionen, eine andere ist die cross-Compilierung. Die Baumaschine ist ein Power6, 64bit; host-Maschine ist ein PowerPC450, 32bit. Gcc-4.1.2.
Erste problem wird über compiler-Optionen:
Bin ich versucht zu installieren, Google protocol buffers auf einem PowerPC-Rechner erfordert die cross-Compilierung. Die Baumaschine ist ein Power6, 64bit; host-Maschine ist ein PowerPC450, 32bit.
Erstens habe ich versucht zu installieren auf der build-Maschine direkt, mit dem Optionen sagen compiler zu verwenden:
./configure --prefix=/home/where_to_install --host=powerpc-bgp-linux
Dann make, make check make install, alles ist in Ordnung. Ich denke, dass ich angegeben habe-host-Rechner, das sollte genug Informationen, kompilieren Sie brauchen, um wissen.
Wenn ich versuche zu kompilieren meines Codes mit
/bgsys/drivers/ppcfloor/gnu-linux/powerpc-bgp-linux/bin/g++ -g -zmuldefs -Xlinker -I/home/somewhere_installed/include $sourceFile -o $fileName -L/home/somewhere_installed/lib -lz -lstdc++ -lrt -lpthread -lm -lc -lprotobuf -lprotoc msg.pb.cc
Bekam ich die Fehlermeldung:
g++: unrecognized option '-zmuldefs'
In file included from zht_util.h:20,
from hash-phm.cpp:9:
meta.pb.h:9:42: error: google/protobuf/stubs/common.h: No such file or directory
und eine Menge Fehler über Variablen im Allgemeinen.h nicht gefunden wurden.
Ich weiß, es ist, weil der compiler nicht erkennt, die option -zmuldefs so nicht finden können, die Datei common.h existiert. Ich Gegoogelt es und bekam keine klare Vorstellung. Wie kann ich von der complier die option oder die Datei finden kann? Oder ist irgendein problem in meinem kompilieren Befehl?
Das zweite problem ist über die cross-Compilierung.
Die readme-Datei von Google protocol buffers ist nicht klar, wie genau die cross-kompilieren. Sie sagte, ich muss mit --with-protoc=protoc zu sagen, zu konfigurieren, welche zu verwenden, OK, aber bevor ich installieren Sie eine Kopie für host-Maschine. Ich benutze den Befehl zuerst installieren Sie eine Kopie für host
./configure --prefix=/home/where_to_install/built --host=powerpc-bgp-linux
dann make, make install.
Dann cross-kompilieren mit unter die gleichen compiler verwendet als host-Maschine verwendet:
./configure --prefix=/home/tonglin/Installed/built_3 CC=/bgsys/drivers/ppcfloor/gnu-linux/bin/powerpc-bgp-linux-gcc CXX=/bgsys/drivers/ppcfloor/gnu-linux/bin/powerpc-bgp-linux-g++ --host=powerpc-bgp-linux --with-protoc=/home/where_already_Installed/built/bin/protoc
Dann machen und bekam die Fehlermeldung:
viel kompilieren info ...blabla.....
collect2: ld returned 1 exit status
make[3]: *** [protoc] Error 1
make[3]: Leaving directory `/gpfs/home/somewere/src/protobuf-2.4.1/src'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/gpfs/home/somewere/src/protobuf-2.4.1/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/gpfs/home/tonglin/Installed/src/protobuf-2.4.1'
make: *** [all] Error 2
Wo habe ich falsch gemacht? Ich habe auch versucht mit der angegebenen compiler in der ersten Installation(für host), er bekam die gleichen Fehler, als zweites installiert haben.
Nachdem ich erfolgreich zu beenden, Installationen, hier habe ich zwei installiert, welches sollte ich nutzen? Gibt es jemand kann mir ein Beispiel nennen, wie genau kann ich einen cross-compile-Google protocol buffers? Ich fand keine detaillierte Beispiel über diese.
Vielen Dank,
-Tony
InformationsquelleAutor Tony | 2011-12-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werde ich versuchen, eine Antwort auf Ihre zweite Frage:
Wenn ich cross-kompiliert die protobuf Bibliothek, die ich zuerst installiert es auf meinem host-Rechner. Dies ist relativ einfach:
Dann sollten Sie es läuft auf dem Buildcomputer. Vergessen Sie nicht zu tun ein
danach oder Artefakte aus dieser Zusammenstellung stören, die nächste build.
Nun Baue ich es für meine anderen Rechner (auf dem build-PC), indem Sie mit
Dann das übliche make, make check und make install und die Dateien, die Sie kopieren müssen, um Ihre andere Maschine in /patch/to/Baujahr/Dateien.
Ich verstehe nicht ganz. So haben Sie Zugriff auf Ihre Maschine bauen, aber nicht auf der host-Maschine? Dann, wie tun Sie Programme ausführen, die auf Ihrem host-Maschine? Wenn Sie Sachen auf, die Maschine, die Sie installieren konnte, alles auf die freigegebenen Laufwerke und führen Sie es.
Ja, das ist eine große Maschine. Kann ich nur Zugriff auf den head-Knoten, die für die build-Maschine, und ich kann die Arbeit von Knoten(host-Rechner) durch die Verwendung von Kobalt-Skripte. Shell wird nicht unterstützt auf der Arbeit-Knoten.
Hm ok. So installieren Sie die protobuf-Bibliothek auf Ihrem build-Maschine funktioniert? Dann machst du ein make distclean und dann konfigurieren Sie mit dem Präfix Hinweis auf das endgültige Ziel der cross-kompilierte Bibliothek? Und dann machen Sie es nicht?
Ja, es nicht zu machen. Meinst du ohne die option "--with-protoc"?
InformationsquelleAutor dinyar
Für die erste Frage, nachdem Sie kompiliert und installiert protobuf-Bibliothek mit
Müssen Sie fügen Sie den include-Pfad unter /your_dir/gehören zu Ihrem makefile mit -I-flag, zum Beispiel
.
InformationsquelleAutor Tony