欢迎光临散文网 会员登陆 & 注册

Protobuf c++ 版链接失败

2022-01-13 14:43 作者:-l0_0l-  | 我要投稿

目录

1 环境

1.1 New

  • Raspbian 11

    • g++ 10.2.1

  • protobuf-cpp-3.19.3

1.2 Old

  • Raspbian 10

    • g++ 8.xxx(具体忘了)

  • protobuf-cpp-3.17.3

2 具体问题

在旧系统能正常编译链接的文件,到新系统中能正常编译,但链接失败,提示「undefined reference to `google::protobuf::xxxx`」。

3 排查

一开始以为是 protobuf 的动态库有问题,于是用回旧的版本重新编译,但结果还是一样。

之后怀疑有没可能是 protobuf 编译时「-std=c++xxx」版本对不上的原因,指定版本重新编译后,结果还是一样。

之后尝试直接安装 libprotobuf-dev 和 protobuf-compiler ,Makefile 删除相关的指定路径,结果还是一样。

没想到其他办法了,按照 Protocol Buffer Basics: C++ 写一个测试工程。期间从 g++ main.cc 开始,根据报错逐渐向后添加参数。 到链接那一步也没问题。将之前写的 proto 文件拿过来编译,也没问题。

很懵。

之后对照两个 Makefile ,看是否加了什么参数导致报错。结果,编译链接都正常。。。

想砸电脑。

最后,注意到两个 Makefile g++ 的参数顺序不同。(有点无语,谁会想到参数顺序能影响命令执行的)

之前习惯将参数放在链接文件之前:

g++ -L../protobuf/lib -lprotobuf main.o test.pb.o

写测试工程的时候倒没这讲究:

g++ main.o test.pb.o -L../protobuf/lib -lprotobuf

之后将正式工程 Makefile 中的 -L -l 移到命令末尾,链接就正常了。。。

Protobuf c++ 版链接失败的评论 (共 条)

分享到微博请遵守国家法律