2016-08-25 5 views
0

Ich versuche eine Beispiel-C++ - Anwendung von Protobuf mit CMake zu erstellen. Aber Linker kann einige Methoden nicht finden, die mit Protobuf in Verbindung stehen.Ich kann keine Test-C++ - App mit Googles Protobuf erstellen

Ich verwende Beispiel .proto-Datei von developers guide. Aber wenn Linker versuchen Objektdatei zu bauen für protobuf C erzeugt ++ Code, den ich habe viele Fehler wie folgt aus:

undefined reference to `google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(int, std::string const&, google::protobuf::io::CodedOutputStream*)' 
undefined reference to `google::protobuf::io::CodedOutputStream::WriteStringWithSizeToArray(std::string const&, unsigned char*)' 
undefined reference to `google::protobuf::internal::empty_string_' 
undefined reference to `google::protobuf::internal::InitEmptyString()' 
undefined reference to `google::protobuf::internal::empty_string_once_init_' 
undefined reference to `google::protobuf::internal::WireFormat::VerifyUTF8StringFallback(char const*, int, google::protobuf::internal::WireFormat::Operation, char const*)' 

Ich benutze protobuf 2.6.1 gebaut mich mit GCC 4.8.4. Beispielanwendung wird von CMake in QTCreator mit QT 5.5.1 Toolset und GCC 4.8.4 erstellt. Es gibt meine CMakeList.txt

project(protobuf-test) 
cmake_minimum_required(VERSION 2.8) 
aux_source_directory(. SRC_LIST) 
add_executable(${PROJECT_NAME} ${SRC_LIST}) 
LINK_DIRECTORIES(/usr/lib) 
TARGET_LINK_LIBRARIES(${PROJECT_NAME} pthread protobuf) 

Vielen Dank für Ihre Hilfe!

+0

Wenn Sie selbst Protobuf erstellt haben, wo haben Sie es installiert? Im System '/ usr/lib'? In der üblichen '/ usr/local/lib'? Irgendwo anders? –

+1

sollten Sie Ihren Linker-Befehl einfügen und sicherstellen, dass Ihre Protobuf-Lib im Suchpfad ist. – Bruce

+0

Ich habe _libprotobuf_ in '/ usr/lib' installiert. Und ich verwende "LINK_DIRECTORIES (/ usr/lib)" in CMakeList.txt, um diesen Pfad dem Linker-Pfad hinzuzufügen. – piphonom

Antwort

0

Problem war in der Linker-Suchpfad. Linker hat versucht libprotobuf aus dem Betriebssystem distributon (Version 8.0.0) anstelle der von mir erstellten lib (Version 9.0.1) zu verwenden.

Verwandte Themen