2017-03-14 11 views
5

Próbuję użyć Protobuf w C++, ale mam problem z uzyskaniem tego, aby zrobił cokolwiek znaczącego. Używam Visual Studio 2015.Trudność przy korzystaniu z Protobuf 3.2 w C++

Zbudowałem protobuf library. Używam najnowszej wersji z github.

Stworzyłem plik .proto jako takie:

syntax = "proto3"; 
package Networking; 

message Robot{ 

message KinematicLinkProto { 
    string name = 1; 
    float x_pos = 2; 
    float y_pos = 3; 
    float z_pos = 4; 
    float roll = 5; 
    float pitch = 6; 
    float yaw = 7; 
    float x_scale = 8; 
    float y_scale = 9; 
    float z_scale = 10; 
} 

repeated KinematicLinkProto links = 1; 

} 

skompilować to i spróbuj dodać go do projektu:

#include "Robot.pb.h" 



int main(int argc, char **argv) 
{ 

    Networking::Robot robot_message; 

    return 0; 

} 

Moje linki łącznikowe libprotobuf.lib. Buduję go jako/MD, a libprotobuf jest zbudowany jako/MD.

Z jakiegoś powodu, to prosty program ma następujące dwa błędy linkera:

Error LNK2019 unresolved external symbol "private: static bool google::protobuf::io::CodedOutputStream::default_serialization_deterministic_" ([email protected]@[email protected]@[email protected]@0_NA) referenced in function "public: virtual unsigned char * __cdecl Networking::Robot::SerializeWithCachedSizesToArray(unsigned char *)const " ([email protected]@[email protected]@[email protected]) 


Error LNK2019 unresolved external symbol "class google::protobuf::internal::ExplicitlyConstructed<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > google::protobuf::internal::fixed_address_empty_string" ([email protected]@[email protected]@@[email protected][email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@[email protected]) referenced in function "protected: void __cdecl google::protobuf::internal::RepeatedPtrFieldBase::Clear<class google::protobuf::RepeatedPtrField<class Networking::Robot_KinematicLinkProto>::TypeHandler>(void)" ([email protected]@[email protected][email protected]@@@[email protected]@@@[email protected]@[email protected]@@IEAAXXZ) 

Jestem bardzo mylić - jest to bardzo prosty program. Co mogłem robić źle?

EDYCJA: Kolega skompilowany proto 3001000. Ta wersja wydaje się działać. Ciekawi mnie, co z 3002000 łamie wszystko.

+0

Są zarówno nagłówki i libprotobuf.lib od wersji 3.2? A może któryś z nich jest starszy? (Musisz użyć dokładnie tej samej wersji.) Czy libprotobuf.lib jest skompilowany z tymi samymi flagami kompilatora MSVC, np. debugowanie vs. release, static vs. dll, single-threaded vs. multi-threaded? Flagi muszą pasować do biblioteki i aplikacji. –

+0

Cześć Kenton, tak, zarówno nagłówki, jak i libprotobuf pochodzą z projektu, który zbudowałem. libprotobuf jest również skompilowany z tymi samymi flagami. – user650261

+0

Nie mogę odtworzyć problemu z dokładnym kodem i programem Visual Studio 2015. Proponuję odbudować bibliotekę libprotobuf.lib z najnowszymi źródłami (dostałem ją tutaj https://github.com/google/protobuf/releases/tag/v3. 2.0), po tym: https://github.com/google/protobuf/blob/master/cmake/README.md (jeśli używasz cmake do zbudowania pliku .sln, upewnij się, że zbudowałeś plik .sln, który pasuje do twojej wersji Visual Studio, niekoniecznie "Visual Studio 12 2013" jak to, co jest w readme. Użyłem "Visual Studio 14 2015"). Działa z/MD lub/MT (jeśli libprotobuf jest odpowiednio skompilowany) –

Odpowiedz

Powiązane problemy