2016-09-01 9 views
1

に未定義の参照、私は、リンカエラーを取得: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-config設定からnfigフラグ:

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

また、私は正常にコンパイルが、その後のタイプを設定するときにセグメンテーション違反、このブロックのクラスへのポインタを作成することができ、

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

デバッグには、以下を明らかに:

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を追加する必要があります

関連する問題