不能编译例如从谷歌协议缓冲区(Can't compile example from goog

2019-06-24 02:22发布

我用grep的其他议题,但他们不帮我=(在我工作的服务器,我没有sudo的privilegies,所以我安装PB与

的./configure --prefix = /家庭/用户名/本地

然后,我创建了“人”的例子源文件,并成功地与protoc编译。

我没有PKG-INFO =(我尝试编译它

克++ -I /家/用户名/本地/包括-L /家/用户名/本地/ lib中-lprotobuf -lpthread的main.cpp person.pb.cc

再有十亿simular错误,即

person.pb.cc:(.text+0x4cf):未定义参考`谷歌:: protobuf的::内部:: kEmptyString”

我认为,这是与链接的问题,而是如何解决呢?

回声$ LD_LIBRARY_PATH /家/用户名/ local / lib目录

在main.cpp中:

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

谢谢。

Answer 1:

把库底:

克++ -I /家/用户名/本地/包括-L /家/用户名/本地/ lib中的main.cpp person.pb.cc -lprotobuf -pthread

从GCC链接选项 :

-llibrary
-l library
    Search the library named library when linking. 
    (The second alternative with the library as a separate argument
    is only for POSIX compliance and is not recommended.)

    It makes a difference where in the command you write this option;
    the linker searches and processes libraries and object files in the
    order they are specified.
    Thus, `foo.o -lz bar.o' searches library `z' after file foo.o but
    before bar.o. If bar.o refers to functions in `z', those functions
    may not be loaded.

此外,使用-pthread代替-lpthread作为-pthread可用于预处理器和连接设置标志。



Answer 2:

库链接旗帜走在编译器的参数的结尾:

克++ -I /家/用户名/本地/包括-L /家/用户名/本地/ lib中的main.cpp person.pb.cc -lprotobuf -lpthread



文章来源: Can't compile example from google protocol buffers