找不到 Protobuf(缺失:Protobuf_PROTOC_EXECUTABLE)

15

当我在项目的构建目录中执行cmake时,出现了这个错误。最初我遇到了一个

 

找不到protobuf-config.cmake

的错误。所以我给了Protobuf_DIR protobuf-config.cmake文件的路径。后来它开始显示这个新的错误:

 

CMake错误,位于/opt/cmake/share/cmake-3.13/Modules/FindPackageHandleStandardArgs.cmake:137(message):未能找到Protobuf(缺少:Protobuf_PROTOC_EXECUTABLE)

 

(找到适合的版本“3.6.1”,最低要求为“3.0.0”)

我也附上了错误日志文件:https://drive.google.com/open?id=1y7BZ6lDBtxvla7r-o188xM_FjwLqwhCx

我在Ubuntu-18上进行此操作,使用的是cmake版本:3.13和protobuf版本:3.6.1


我看到你的问题标记了spack。从提供的日志中可以看出,您实际上正在尝试使用spack提供的protobuf。您能列出protobuf-3.6.1目录中的文件和目录吗?此外,在构建protobuf时使用了哪些规范也很重要。 - robertm.tum
5个回答

20

您可能未安装Protobuf编译器和开发文件。要解决此问题,请运行以下命令:

sudo apt-get install protobuf-compiler libprotobuf-dev

或者,如果您正在手动构建Protobuf,则不能将其构建类型设置为RelWithDebInfo,因为这会导致库和CMake出现问题。


无法使用RelWithDebInfo构建它,因为这会导致库和CMake出现问题。- 为什么? - denfromufa
@denfromufa 我不是完全确定。我以前遇到过这个问题,那是因为我正在构建RelWithDebInfo。也许这与优化和调试信息冲突有关? - S.S. Anne
我知道,我来晚了,但我认为他不想使用缺失的依赖项protobuf,而是要用spack部署。问题是为什么spack没有正确部署protobuf或者为什么CMake没有正确检测到二进制文件。 - robertm.tum
@robertm.tum 看起来有人在我回答后添加了spack标签。 - S.S. Anne

1

在Ubuntu 20.04上从apt安装后,没有访问 /usr/include/google 的权限。

解决方法: sudo chmod +Xr -R /usr/include/google


1
ls: cannot access '/usr/include/google': No such file or directory in Ubuntu 20.04 - Mona Jalal

0
快速补充一下,在按照this answer的步骤安装Protobuf后,我不得不删除工作区中的build文件夹,才能使cmake在没有错误的情况下运行 :)

0

默认仓库通常包含过时的protobuf版本。最好从源代码手动安装:

git clone --progress -b v3.10.0 https://github.com/protocolbuffers/protobuf && \
    ( \
      cd protobuf; \
      mkdir build; \
      cd build; \
      cmake ../cmake \
        -DCMAKE_BUILD_TYPE=Release \
        -Dprotobuf_BUILD_SHARED_LIBS=ON \
        -Dprotobuf_BUILD_TESTS=OFF; \
      make -j4 install; \
    ) && \
    rm -rf protobuf

-2

嗨,

使用sudo apt list | grep protobuf列出您的protobuf库,它应该告诉您默认安装了什么。运行protoc --version以查看现在默认情况下被识别的内容。如果需要,从github获取一个版本,构建并安装它(这不应该花费太长时间)。然后再次运行protoc --version


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接