2016-09-01 1 views
1

코드 작은 protobuf 클래스 (자체는 성공적으로 컴파일하는) 내가 링커 오류가 전화를 컴파일 할 시도 할 때 :C++ Protobuf이/소멸자 생성자에 대한 참조를 정의되지 않은

undefined reference to `ggf::Block::Leveling()' 
undefined reference to `ggf::Block::~Leveling()' 

이 오류를 발생시키는 코드의 라인 :

ggf::Block blockMessage; 

protobuf :

package ggf; 
message Leveling { 
     required int32 type   = 1; 
     optional uint64 blockNumber = 2; 
     optional bytes blockData = 3; 
} 

그리고 마지막으로, 내 빌드 라인, 공동 PKG-설정에서 nfig 플래그 :

: 또는

g++ -o send sendercode.cpp -std=c++11 -lprotobuf -pthread -lpthread -g 

, 나는

ggf::Block *blockRequest; 
blockRequest->set_type(10); //SIGSEGV 

디버깅은 다음과 계시, 유형을 설정할 때 성공적으로 컴파일하지만 세그먼테이션 폴트 (segfault)이 블록 클래스에 대한 포인터를 만들 수 있습니다

Program received signal SIGSEGV, Segmentation fault. 
0x0000000000400d66 in ggf::Block::set_has_type (this=0x0) at block.pb.h:172 

초기화되지 않은 것처럼 작동합니다. 초기화 단계를 놓쳤습니까?

+0

문제와 관련,하지만'-lpthread되지 않음'불필요 '-lpthread'. – Nawaz

+0

segfault가 초기화되지 않은 포인터를 참조 해제하여 발생했습니다 –

답변

3

: 당신은 실제로 당신이 * *하지 말아야 할, -pthread``있을 때

g++ -o send sendercode.cpp block.pb.cc -std=c++11 -lprotobuf -pthread -g 
+0

protobuf (-lprotobuf) 대신 protoc (-lprotoc)에 연결했는데 일부 사용자에게 도움이 될 수 있습니다. – sfiore

0

"block.pb.h"파일 만 포함하면이 문제가 발생합니다. 또한 컴파일 파일 목록에 block.pb.cc을 추가해야

관련 문제