私は他のトピックを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"
...
ありがとう。
ライブラリを最後に配置します。
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
を使用してください。
ライブラリリンクフラグは、コンパイラの引数の最後にあります。
g ++ -I/home/username/local/include -L/home/username/local/lib main.cpp person.pb.cc -lprotobuf -lpthread