我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