web-dev-qa-db-ja.com

Googleプロトコルバッファから例をコンパイルできません

私は他のトピックをgrepしますが、それらは私を助けません=(。私の作業サーバーでは、Sudo特権がないので、PBをインストールします

./configure --prefix =/home/username/local

次に、「person」の例を使用してソースファイルを作成し、protocを使用して正常にコンパイルします。

Pkg-info =(がありません。でコンパイルしようとしています

g ++ -I/home/username/local/include -L/home/username/local/lib -lprotobuf -lpthread main.cpp person.pb.cc

そして、10億のシミュレーションエラーが発生します。

person.pb.cc:(。text+0x4cf): `google :: protobuf :: internal :: kEmptyString 'への未定義の参照

リンクの問題だと思いますが、どうやって解決したらいいのでしょうか?

echo $ LD_LIBRARY_PATH/home/username/local/lib

main.cppで:

#include "person.pb.h"
...

ありがとう。

12
ZhekakehZ

ライブラリを最後に配置します。

g ++ -I/home/username/local/include -L/home/username/local/lib main.cpp person.pb.cc -lprotobuf -pthread

From GCCリンクオプション

-llibrary 
-llibrary 
リンク時にlibraryという名前のライブラリを検索します。 
(ライブラリを個別の引数として使用する2番目の選択肢
はPOSIX準拠のみであり、推奨されません。)
 
コマンドのどこに違いがありますか。このオプションを記述します; 
リンカはライブラリとオブジェクトファイルを
指定された順序で検索および処理します。
したがって、 `foo.o -lz bar.o 'はライブラリを検索しますファイルfoo.oの後の `z 'が、bar.oの前の
。 bar.oが `z 'の関数を参照している場合、それらの関数
はロードされない可能性があります。

また、-pthreadはプリプロセッサとリンカのフラグを設定する可能性があるため、-lpthreadの代わりに-pthreadを使用してください。

21
hmjd

ライブラリリンクフラグは、コンパイラの引数の最後にあります。

g ++ -I/home/username/local/include -L/home/username/local/lib main.cpp person.pb.cc -lprotobuf -lpthread

2
mfontanini