2016-12-22 5 views
-2

私はgccでubuntu 16.04を実行しています。gccのprotobufコンパイルの問題

g++ -m64 -Wl,-O1 -L/usr/lib/x86_64-linux-gnu /usr/local/lib/libprotobuf.a my_messages.pb.cc q.cpp -lpthread 

protoc --versionリターン:

q.ccpファイルがコンパイルに使用

#include <my_messages.pb.h> 

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

    google::protobuf::MyMessage* logged_msg_; 

    return 0; 
} 

コマンドである2.2.0

gccが--version

gcc (Ubuntu 4.8.5-4ubuntu2) 4.8.5 
Copyright (C) 2015 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

コンパイルエラーが

undefined reference to `google::protobuf::internal::ExtensionSet::Clear() 

で始まり、プロトコルバッファのすべての機能のために未定義の参照エラーが発生します。

+0

libprotobuf.aは、必要な他のオブジェクトファイルの後ろに置いてください。 -lオプションの引数にしてはいけませんか? –

答えて

2

GCCへの引数の順番(オブジェクトファイルとソースファイルの後ろにライブラリを置く必要があります)。おそらく

g++ -Wall -m64 -O1 -g -L/usr/lib/x86_64-linux-gnu -L/usr/local/lib/ \ 
    my_messages.pb.cc q.cpp -lprotobuf -lpthread 

(私は-Wl,-O1が間違ってと役に立たないですが、私はそれをチェックするためにあなたを残していることと信じています)

は、ドキュメントのGCC command options chapterを読むためにいくつかの時間をかけて欲しいです。上のコマンドでg++の代わりにg++ -vを(一時的に)使用して、何が起こっているのかを理解することができます。

ビルドにはおそらくGNU makeを使用する必要があります。インスピレーションについては、this exampleMakefileをご覧ください。 documentationmakeと読んでください。