Protocol buffers 找不到libprotoc.so.22文件,但protobuf-all-3.10.0的安装程序已安装libprotoc.so.21
在Ubuntu 18.04.02服务器版中,我从这里下载了protobuf-all-3.10.0.zip,并按照此处的指示安装在/usr/local/lib/库中:Protocol buffers 找不到libprotoc.so.22文件,但protobuf-all-3.10.0的安装程序已安装libprotoc.so.21,protocol-buffers,protoc,Protocol Buffers,Protoc,在Ubuntu 18.04.02服务器版中,我从这里下载了protobuf-all-3.10.0.zip,并按照此处的指示安装在/usr/local/lib/库中: (base) marco@pc:/usr/local/lib$ ls -lah | grep "libproto*" -rw-r--r-- 1 root root 14M Oct 25 11:27 libprotobuf-lite.a -rwxr-xr-x 1 root root 1011 Oct 25 11:27 lib
(base) marco@pc:/usr/local/lib$ ls -lah | grep "libproto*"
-rw-r--r-- 1 root root 14M Oct 25 11:27 libprotobuf-lite.a
-rwxr-xr-x 1 root root 1011 Oct 25 11:27 libprotobuf-lite.la
lrwxrwxrwx 1 root root 26 Oct 25 11:27 libprotobuf-lite.so -> libprotobuf-lite.so.21.0.0
lrwxrwxrwx 1 root root 26 Oct 25 11:27 libprotobuf-lite.so.21 -> libprotobuf-lite.so.21.0.0
-rwxr-xr-x 1 root root 5.3M Oct 25 11:27 libprotobuf-lite.so.21.0.0
-rw-r--r-- 1 root root 88M Oct 25 11:27 libprotobuf.a
-rwxr-xr-x 1 root root 976 Oct 25 11:27 libprotobuf.la
lrwxrwxrwx 1 root root 21 Oct 25 11:27 libprotobuf.so -> libprotobuf.so.21.0.0
lrwxrwxrwx 1 root root 21 Oct 25 11:27 libprotobuf.so.21 -> libprotobuf.so.21.0.0
-rwxr-xr-x 1 root root 34M Oct 25 11:27 libprotobuf.so.21.0.0
-rw-r--r-- 1 root root 136M Oct 25 11:27 libprotoc.a
-rwxr-xr-x 1 root root 992 Oct 25 11:27 libprotoc.la
lrwxrwxrwx 1 root root 19 Oct 25 11:27 libprotoc.so -> libprotoc.so.21.0.0
lrwxrwxrwx 1 root root 19 Oct 25 11:27 libprotoc.so.21 -> libprotoc.so.21.0.0
-rwxr-xr-x 1 root root 45M Oct 25 11:27 libprotoc.so.21.0.0
(base) marco@pc:/usr/local/lib$
以下说明:我尝试编译示例的protobuffer:
(base) marco@pc:~/protobuf-3.10.0/examples$ protoc -I=/usr/local/include -cpp_out=.
$SRC_DIR/addressbook.proto
protoc: error while loading shared libraries: libprotoc.so.22: cannot open shared object file: No
such file or directory
更新:
1) marco@pc:~$ which protoc
/usr/bin/protoc
(base) marco@pc:/usr/bin$ ls -lah | grep protoc
-rwxr-xr-x 1 root root 374K Oct 24 19:41 protoc
(base) marco@pc:/usr/bin$ ldd protoc
linux-vdso.so.1 (0x00007fffc7fc6000)
libprotoc.so.22 => not found
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
(0x00007f23bfea9000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1
(0x00007f23bfc91000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0
(0x00007f23bfa72000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f23bf681000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f23bf2e3000)
/lib64/ld-linux-x86-64.so.2 (0x00007f23c0436000)
如何解决这个问题
更新2:感谢@Botje,我发现在/usr/protoc中有第二个我不知道的protoc。删除后,我之前安装的第二个“重新出现”,工作正常
Marco使用
哪个协议
找出您正在运行哪个协议
,然后使用ldd
找出它的依赖关系。听起来好像有多个二进制文件。@Botje(base)marco@pc:~$哪个protoc/usr/bin/protoc不是/usr/local/bin,那么它是如何到达那里的呢?您是否从apt get安装了protoc(看起来是更新的)?选择要使用的一个,然后卸载另一个。@Botje我猜正如您已经说过的,有多个protoc,即使libprotoc.so.22不存在于这两个protoc中。(我用ldd信息更新了上面的问题)同样,您需要修复/usr/bin中的问题并删除/usr/local/bin中的问题,或者使用/usr/local/bin中的问题并删除/usr/bin中的问题。