Installieren von Google Protocol Buffers auf einem Mac


101

Ich möchte die ältere Version von Google Protocol Buffers (protobuf-2.4.1) über die Terminal-Befehlszeile auf einem Mac installieren. Ich habe es mit versuchtbrew install protobuf , aber die neueste Version 2.5.0 wurde installiert. Ist es möglich, die ältere Version vom Terminal aus zu installieren?

Vielen Dank


2
Warum möchten Sie eine ältere Version? Sie sind abwärtskompatibel, solange Sie die .pb.hund .pb.cc-Dateien neu generieren.
Kenton Varda

Ich dachte, ich verwende besser die alte Version, da das Projekt mit 2.4.1 erstellt wurde. Aber wie Sie sagten, ich habe die beiden Dateien neu generiert und es funktioniert gut. Vielen Dank.
Informatiker

4
Im Allgemeinen erfahren Sie hier, wie Sie eine bestimmte Version einer Formel installieren .
Duvrai

Antworten:


146

Es gibt einige Probleme beim Erstellen von protobuf 2.4.1 aus dem Quellcode auf einem Mac. Es gibt einen Patch, der ebenfalls angewendet werden muss. All dies ist in der Homebrew-Formel protobuf241 enthalten, daher würde ich die Verwendung empfehlen.

Um den Protokollpuffer Version 2.4.1 zu installieren, geben Sie Folgendes in ein Terminal ein:

brew tap homebrew/versions
brew install protobuf241

Wenn Sie bereits eine Protokollpufferversion haben, die Sie aus dem Quellcode installieren wollten, können Sie Folgendes in ein Terminal eingeben, damit der Quellcode von der Homebrew-Version überschrieben wird:

brew link --force --overwrite protobuf241

Überprüfen Sie, ob Sie jetzt die richtige Version installiert haben, indem Sie Folgendes eingeben:

protoc --version

Es sollte 2.4.1 anzeigen


2
Hey, ich habe es versucht, aber auf protoc --version bekomme ich -bash: protoc: Befehl nicht gefunden
ramin

Version 2.4.1 wird unter "/usr/local/Cellar/protobuf241/2.4.1" installiert. Sie sollten einfach einen Symlink von "../2.4.1/protoc" erstellen und in "/ usr / local / bin" ablegen ". Versuchen Sie als "protoc --version" und sollte genau so funktionieren, wie es sollte.
Gyuri Majercsik

4
Dieser Hahn ist nicht mehr verfügbar
Mihai Todor

22
Funktioniert nicht mehr. Ich bekommeWarning: homebrew/versions was deprecated. This tap is now empty as all its formulae were migrated.
Shih-Min Lee

1
es war auf den Kern migriert, verwenden Sie stattdessen
Folgendes

70

Dies erfolgt nicht über das Brauen, aber das Endergebnis ist das gleiche.

  1. Laden Sie den protobuf-2.4.1 von https://protobuf.googlecode.com/files/protobuf-2.4.1.tar.gz herunter
  2. Extrahieren Sie die Datei tar.gz.
  3. $ cd ~ / Downloads / protobuf-2.4.1
  4. $. / configure
  5. $ machen
  6. $ Scheck machen
  7. $ sudo make install
  8. $ welches protoc
  9. $ protoc --version

Die Schritte 4 bis 7 stammen aus der Datei README.txt des Protobuf-Tarballs.


2
Ich habe den Brew-Ansatz ausprobiert, aber für die neueste Version von protobuf (jetzt 2.6.0) lässt er sich mithilfe der genauen Liste der obigen Schritte problemlos aus Quellen kompilieren. Dies ist noch nützlicher, wenn Sie versuchen, Standard-Proto-Definitionen zu erweitern (z. B. Hinzufügen von Feldoptionen durch Erweitern von Deskriptor.Proto), wenn Sie die Originalquellen benötigen oder auf andere Weise auf den Kellerpfad in der Home-Brew-Version der Installation verweisen müssen (hässlich?). .
Necro

2
Beim Ausführen des Befehls make sind Fehler aufgetreten: 3 Fehler wurden generiert. make [2]: *** [message.lo] Fehler 1 make [1]: *** [all-rekursiv] Fehler 1 make: *** [all] Fehler 2
Anandaraja_Srinivasan

Dies ist die Lösung, die für mich funktioniert hat. Aber siehe Xiaoqi Chus Antwort, wenn Sie mit den Fehlern beim Erstellen konfrontiert werden.
Amudhan

Schritte 4-7 sind /protobuf/src/README.md, möchte ich es in der war README.mdim /protobufVerzeichnis
Kevin Zhao

4
Dies funktionierte für mich die einzige Änderung ist, dass Sie Quellen von github.com/google/protobuf/releases
r00tt

34

Es ist ein neues Jahr und es gibt eine neue Diskrepanz zwischen der Version von protobufin Homebrew und der neuesten Version. Stand Februar 2016,brew install protobuf Sie Version 2.6.1.

Wenn Sie stattdessen die Beta-Version 3.0 möchten, können Sie sie installieren mit:

brew install --devel protobuf

16

Wenn Sie hier gelandet sind und nach Informationen zur Installation von Protokollpuffern auf einem Mac suchen, können Sie dies mit Homebrew tun, indem Sie den folgenden Befehl ausführen

brew install protobuf

Es installiert die neueste verfügbare Version von protobuf. Für mich war zum Zeitpunkt des Schreibens die Version 3.7.1 installiert

Wenn Sie eine ältere Version installieren möchten, schlagen Sie die verfügbaren auf der Paketseite Protobuf Package - Homebrew nach und installieren Sie diese spezifische Version des Pakets.

Die älteste verfügbare Protobuf-Version in diesem Paket ist v3.6.1.3


1
Das OP fordert jedoch ausdrücklich die Installation der alten Version an.
Himanshu Tanwar


12

Aus irgendeinem Grund muss ich protobuf 2.4.1 in meinem Projekt unter OS X El Capitan verwenden. Homebrew hat jedoch protobuf241 aus seiner Formel entfernt. Ich installiere es manuell gemäß der Antwort von @ kksensei und muss während des Vorgangs einen Fehler beheben.

Während des Erstellungsprozesses erhalte ich 3 Fehler wie folgt:

google/protobuf/message.cc:130:60: error: implicit instantiation of undefined template 'std::__1::basic_istream<char, std::__1::char_traits<char> >'

  return ParseFromZeroCopyStream(&zero_copy_input) && input->eof();

                                                           ^

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/iosfwd:108:28: note: template is declared here

    class _LIBCPP_TYPE_VIS basic_istream;

                           ^

google/protobuf/message.cc:135:67: error: implicit instantiation of undefined template 'std::__1::basic_istream<char, std::__1::char_traits<char> >'

  return ParsePartialFromZeroCopyStream(&zero_copy_input) && input->eof();

                                                                  ^

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/iosfwd:108:28: note: template is declared here

    class _LIBCPP_TYPE_VIS basic_istream;

                           ^

google/protobuf/message.cc:175:16: error: implicit instantiation of undefined template 'std::__1::basic_ostream<char, std::__1::char_traits<char> >'

  return output->good();

               ^

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/iosfwd:110:28: note: template is declared here

    class _LIBCPP_TYPE_VIS basic_ostream;

                           ^

(Entschuldigung, ich weiß nicht, wie ich Code anhängen soll, wenn der Code '`' enthält.)

Wenn Sie den gleichen Fehler erhalten, bearbeiten Sie bitte src / google / protobuf / message.cc, fügen Sie ihn #include <istream>oben in die Datei ein und $ makewiederholen Sie den Vorgang. Sollte keine Fehler auftreten. Danach tun $ sudo make install. Nach Abschluss der Installation $protoc --versionsollte das richtige Ergebnis angezeigt werden.



6
brew install --devel protobuf

Wenn es Ihnen sagt "protobuf-2.6.1 bereits installiert": 1. brew uninstall --devel protobuf 2. brew link libtool 3.brew install --devel protobuf


2

FWIW., Die neueste Version von Brew ist bei protobuf 3.0 und enthält keine Formeln für die älteren Versionen. Dies ist etwas "unpraktisch".

Während Protobuf auf Wire-Ebene kompatibel sein kann, ist es auf der Ebene der generierten Java-Klassen absolut nicht kompatibel: Sie können keine mit Protoc 2.4 generierten .class-Dateien mit der Protobuf-2.5-JAR usw. usw. verwenden. Aus diesem Grund wird aktualisiert Protobuf-Versionen sind ein so heikles Thema im Hadoop-Stack: Sie erfordern ausnahmslos eine Koordination zwischen verschiedenen Projekten und sind traumatisch genug, dass niemand sie gerne macht.


2

So installieren Sie den Protokollpuffer (ab heutiger Version v3.7.0)

  1. Gehen Sie zu dieser Website
  2. Laden Sie die Zip-Datei entsprechend Ihrem Betriebssystem herunter (z. B. protoc-3.7.0-osx-x86_64.zip). Dies gilt auch für andere Betriebssysteme.

  3. Verschieben Sie die ausführbare Datei in protoc-3 / bin / protoc in eines Ihrer Verzeichnisse in PATH. Auf dem Mac schlage ich vor, es in / usr / local / bin abzulegen

Jetzt kannst du loslegen 💪🏾

(optional) Es gibt auch eine Include-Datei, die Sie hinzufügen können. Dies ist ein Ausschnitt aus README.md

If you intend to use the included well known types then don't forget to
copy the contents of the 'include' directory somewhere as well, for example
into '/usr/local/include/'.

Please refer to our official github site for more installation instructions:
https://github.com/protocolbuffers/protobuf

2

Es gibt einen anderen offiziellen Weg von Google, wie von einem anderen Nutzer erwähnt.

Lesen Sie es vollständig durch, bevor Sie es versuchen.

Hier sind die Schritte:

Öffnen Sie das Terminal und geben Sie Folgendes ein

  1. PROTOC_ZIP=protoc-3.7.1-osx-x86_64.zip
  2. curl -OL https://github.com/google/protobuf/releases/download/v3.7.1/$PROTOC_ZIP
  3. sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc
  4. rm -f $PROTOC_ZIP

Hat für mich gearbeitet.

PS
Dies ist nur für Version 3.7.1 in OSX. Wenn Sie eine andere Version / Plattform installieren möchten, besuchen Sie den Release-Link, überprüfen Sie die Details der neuesten Version und verwenden Sie diese Informationen. Referenz


1
Schön und einfach. Vielen Dank! : tada:
rodrigo-silveira



0

HomeBrew-Versionen wurden entfernt und Formeln wurden geleert. Daher empfehle ich, es manuell zu installieren, indem Sie die folgenden Schritte ausführen.

Vorerst müssen Sie das Toolset "Protokollpuffer" manuell erstellen und installieren.

  1. Quellcode herunterladen: https://github.com/google/protobuf/releases/download/v2.4.1/protobuf-2.4.1.tar.gz

  2. tar xvfz protobuf-2.4.1.tar.gz

  3. cd protobuf-2.4.1

  4. Lauf ./configure

  5. Bearbeiten Sie src / google / protobuf / message.cc und fügen Sie #include oben in die Datei ein

  6. Führen Sie den makeBefehl vom Stammverzeichnis des Ordners aus, dh protobuf-2.4.1 /

  7. Lauf sudo make install

  8. Ausführen /usr/local/bin/protoc --version, um die Version der Protobuf-Compiler-Version zu überprüfen. Die Terminalausgabe sollte sein:

    Version: libprotoc 2.4.1

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.