无法从谷歌协议缓冲区编译示例

我grep的其他主题,但他们不帮我=(在我的工作服务器上,我没有sudo特权,所以我安装PB

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

然后我用“person”例子创build源文件并用protoc成功编译它。

我没有pkg-info =(。我试着编译它

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

然后有十亿个相似的错误即

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

从GCC链接选项 :

 -llibrary
 -l图书馆
    链接时搜索名为library的库。 
     (与图书馆的第二种选择作为一个单独的论点
    仅适用于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