2015-03-10 2 views
2

J'ai installé grpc-java selon le instructions sur mon Mac (exécutant Mavericks). Cela comprenait l'installation protobuf v3.0.0-alpha-2, ce que je fis:grpc make ne peut pas trouver le protocole 3

$ which protoc 
/usr/local/bin/protoc 

$ /usr/local/bin/protoc --version 
libprotoc 3.0.0 

Les exemples Java fonctionnent très bien. Maintenant, je voudrais essayer les exemples C++ et, idéalement, avoir un client C++ parler à un serveur Java et vice-versa.

J'ai cloné grpc et j'ai tenté de l'installer. sudo make install et, par la suite, make verify-install échouent, me disant que protobuf 3 n'est pas installé:

$ make verify-install 
We couldn't find protoc 3.0.0+ installed on your system. While this 
won't prevent grpc from working, you won't be able to compile 
and run any meaningful code with it. 


Please download and install protobuf 3.0.0+ from: 

    https://github.com/google/protobuf/releases 

Once you've done so, or if you think this message is in error, 
you can re-run this check by doing: 

    make verify-install 

en ligne 259 de GRPC/Makefile, je vois ce test:

PROTOC_CHECK_CMD = protoc --version | grep -q libprotoc.3 

Si je lance protoc --version sur mon Mac, je vois quelque chose de différent (voir ci-dessus), donc j'ai essayé de changer la ligne ci-dessus pour

PROTOC_CHECK_CMD = protoc --version | grep -q 'libprotoc 3.0.0' 

Cependant, je reçois la même erreur de make verify-install

J'ai également essayé de supprimer les tests PROTOBUF_CHECK_CMD et PROTOC_CHECK_CMD à run_dep_checks (sur la ligne # 895) mais l'installation échoue toujours avec la même erreur.

Quand je lance make sur grpc-common/cpp/helloworld, il construit, mais greeter_client et les deux greeter_server échouent:

$ ./greeter_server 
E0310 17:38:23.349841000 140735186797328 server.c:617] assertion failed: grpc_is_initialized() && "call grpc_init()" 
Abort trap: 6 

Je suppose que le problème avec l'installation de GRPC.

Donc, protobuf 3 est clairement installé. Comment puis-je convaincre le Makefile de cela, ou au moins contourner ce test?

+0

Le message à propos de protoc missing n'est pas un échec de construction, il est simplement informatif. Notez qu'il est dit "cela n'empêchera pas grpc de fonctionner". – murgatroid99

+0

Cette commande 'grep' d'origine devrait fonctionner. 'grep' utilise des expressions régulières, ainsi'. 'correspond à n'importe quel caractère, et il fait correspondre la sous-chaîne, donc il devrait correspondre à la partie 'libprotoc 3' de la chaîne de version.En tout cas, cela ne devrait pas être le problème. Si c'était le cas, le Makefile dans l'exemple Cellow helloworld n'aurait pas réussi. – murgatroid99

Répondre

1

Le message que vous voyez à propos du protocole n'indique pas que make a échoué. C'est juste un avertissement. Vous avez correctement installé gRPC et réussi à construire l'exemple de Hello World.

L'exemple ne fonctionne pas sur Mac en raison d'un bogue dans gRPC qui fait actuellement l'objet d'une investigation dans this GitHub issue.

+0

Oui, j'ai échangé quelques emails à ce sujet avec Nicolas Noble sur https://groups.google.com/forum/#!forum/grpc-io plus tôt aujourd'hui. Je vois qu'il y a une demande d'extraction pour corriger le problème Makefile. – Thad

0

Le problème est que sudo make install installé le protocole sous /usr/local/bin mais grpc regarde sous /usr/bin. Essayez de configurer protobuf en utilisant:

./configure --prefix=/usr 

Cela installera le binaire protoc dans un endroit qui grpc s'y attend. Quand vous faites sudo make install sur grpc alors sudo trouvera le protocole correctement. Vous pouvez vérifier que sudo il voit avec cette commande:

sudo which protoc 
sudo sh -c 'echo $PATH' 

Notez que sudo echo $PATH ne vous dit pas où le chemin de sudo est.