Google protocol buffers la compilation croisée
Mes problèmes d'utilisation de Google protocol buffers a deux parties, l'une est sur les options du compilateur, un autre est la compilation croisée. La machine de compilation est un Power6, 64 bits; machine hôte est un PowerPC450, 32bit. Gcc 4.1.2.
Premier problème est sur les options du compilateur:
Je suis en train d'installer Google protocol buffers sur une machine PowerPC qui nécessite la compilation croisée. La machine de compilation est un Power6, 64 bits; machine hôte est un PowerPC450, 32bit.
Tout d'abord j'ai essayé de l'installer sur la machine de compilation directement, avec des options de dire compilateur à utiliser:
./configure --prefix=/home/where_to_install --host=powerpc-bgp-linux
Alors faire, faire vérifier, make install, tout va bien. Je pense que j'ai spécifié la machine hôte, qui devrait inclure suffisamment d'informations pour que la compilation besoin de savoir.
Lorsque j'essaie de compiler mon code avec
/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
M'a été donné d'erreur:
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
et beaucoup d'erreur sur les variables en commun.h n'ont pas été trouvés.
Je sais que c'est parce que le compilateur ne reconnait pas l'option -zmuldefs ne peut donc pas trouver le fichier commun.h existe. Je l'ai Googlé et nous n'avons pas une idée claire. Comment puis-je faire le compilateur peut utiliser l'option ou peut trouver le fichier? Ou un problème dans ma compilation de commande?
Le deuxième problème est sur la compilation croisée.
Le fichier lisezmoi de Google protocol buffers n'est pas clair au sujet de exactement comment faire de la compilation croisée. Il a dit que je dois utiliser l'option --with-protoc=protoc dire à configurer pour l'utiliser, OK, mais avant cela, je dois installer une copie de la machine hôte. J'utilise la première commande pour installer une copie de l'hôte
./configure --prefix=/home/where_to_install/built --host=powerpc-bgp-linux
puis make, make install.
Une compilation croisée avec ci-dessous qui utilise le même compilateur que la machine hôte utilise:
./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
Puis faire et a reçu l'erreur:
beaucoup de compiler des infos ...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
Où ai-je fait de mal? J'ai aussi essayé avec le compilateur à la première installation(pour l'hôte), il a en même erreur que deuxième installer fait ci-dessus.
Une fois que j'ai réussi à terminer les installations, ici, je vais avoir deux installations, qui dois-je utiliser? Est-il un peut me donner un exemple de la façon dont exactement que je peux faire de la compilation croisée Google protocol buffers? Je n'ai trouvé aucun exemple détaillé à ce sujet.
Merci beaucoup,
-Tony
OriginalL'auteur Tony | 2011-12-27
Vous devez vous connecter pour publier un commentaire.
Je vais essayer de répondre à votre deuxième question:
Quand je cross-compilé le protobuf bibliothèque j'ai d'abord installé sur ma machine hôte. Ceci est relativement simple:
Alors vous devriez avoir en cours d'exécution sur votre machine. N'oubliez pas de faire un
par la suite ou les objets provenant de cette compilation d'interférer avec la prochaine génération.
Maintenant je construire pour mon autre machine (sur la machine de compilation) par la configuration avec
Puis effectuez l'habitude de faire, de faire vérifier et s'installer et les fichiers que vous avez besoin de copier sur les autres machines sont dans /patch//construit/fichiers.
Je ne comprends pas très bien. Si vous avez accès à votre machine de compilation, mais pas à votre machine hôte? Alors comment voulez-vous exécuter des programmes sur votre machine hôte? Si vous pouvez lancer des choses sur cette machine, vous pouvez installer le tout sur le partage des disques et de les exécuter.
Oui, c'est une grosse machine. Je n'ai accès qu'à la tête de nœud qui est la machine de compilation, et je peux utiliser le travail des nœuds(ordinateur hôte) à l'aide de Cobalt scripts. La coque n'est pas pris en charge sur les travaux de nœuds.
Hm ok. Si l'installation de la protobuf bibliothèque sur votre machine fonctionne? Ensuite, vous faites un make distclean et vous devez ensuite configurer le préfixe pointant vers la destination finale pour la cross-compilation de la bibliothèque? Et puis faire de la panne?
Oui, il ne parvient pas à faire. Voulez-vous dire sans l'option "--with-protoc"?
OriginalL'auteur dinyar
Pour la première question, après avoir compilé et installé protobuf bibliothèque avec
Vous avez besoin d'ajouter l'include path dans /your_dir/inclure à votre makefile avec l'option-I, par exemple
.
OriginalL'auteur Tony