一尘不染

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

linux

我grep其他主题,但他们没有帮助我=(。在我的工作服务器上,我没有sudo特权,因此我使用

./configure –prefix = / home /用户名/本地

然后,我用“ person”示例创建源文件,并使用protoc成功地对其进行编译。

我没有pkg-info =(。我尝试用

g ++ -I / home /用户名/本地/ include -L / home /用户名/本地/ lib -lprotobuf -lpthread
main.cpp person.pb.cc

然后有十亿个模拟错误,即

person.pb.cc:(.text+0x4cf):对`google :: protobuf :: internal ::
kEmptyString’的未定义引用

我认为链接存在问题,但是如何解决呢?

回声$ LD_LIBRARY_PATH / home /用户名/本地/ lib

在main.cpp中:

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

谢谢。


阅读 280

收藏
2020-06-07

共1个答案

一尘不染

将库放在最后:

g ++ -I / home /用户名/本地/ include -L / home /用户名/本地/ lib main.cpp person.pb.cc
-lprotobuf -pthread

GCC链接选项

-图书馆
-l库
    链接时搜索名为library的库。 
    (第二种选择将库作为单独的参数
    仅用于POSIX合规性,不建议使用。)

    在命令中写入此选项的位置会有所不同。
    链接器在以下位置搜索和处理库和目标文件:
    指定顺序。
    因此,`foo.o -lz bar.o'在文件foo.o之后搜索库'z',但是
    在bar.o之前 如果bar.o引用`z'中的函数,则这些函数
    可能未加载。

另外,使用-pthreadpre-a和-lpthreadas -pthread可能为预处理器和链接器设置标志。

2020-06-07