Protocol buffers 找不到libprotoc.so.22文件,但protobuf-all-3.10.0的安装程序已安装libprotoc.so.21

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

在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 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中的问题。