cmakeprotocol-bufferscmake-gui

How to force CMake to use a special version of Protobuf installed on system?


I want to set Protobuf_INCLUDE_DIRS to a directory of my choosing, however, I am not sure how to do that.

$ locate FindProtobuf.cmake
/usr/share/cmake-3.16/Modules/FindProtobuf.cmake

I can see that in FindProtobuf.cmake, we have these:

if(Protobuf_FOUND)
    set(Protobuf_INCLUDE_DIRS ${Protobuf_INCLUDE_DIR})
endif()

I want it to be set to the second option here:

$ which -a protoc
/home/mona/anaconda3/bin/protoc
/usr/local/bin/protoc

However, it is set to the first option /home/mona/anaconda3/bin/protoc despite forcing it in ~/.bashrc to second option: /usr/local/bin/protoc using below command: alias protoc=/usr/local/bin/protoc

The version that my program requires is 3.6.1 and alias protoc=/usr/local/bin/protoc assures that. However, ProtobufCMake forces the path to be /home/mona/anaconda3/bin/protoc and that version is 3.13.0.

A bit about the problem I am facing. I am using openpose and for installing it in Ubuntu 20.04, I am using CMake. It requires the protobuf version to be 3.6.1.

More on here https://github.com/CMU-Perceptual-Computing-Lab/openpose/issues/1817

Here are the messages:

CMake Error at /usr/share/cmake-3.16/Modules/FindProtobuf.cmake:469 (file):
  file STRINGS file "/usr/include/google/protobuf/stubs/common.h" cannot be
  read.
Call Stack (most recent call first):
  CMakeLists.txt:429 (find_package)


CMake Error at /usr/share/cmake-3.16/Modules/FindProtobuf.cmake:475 (math):
  math cannot parse the expression: " / 1000000": syntax error, unexpected
  exp_DIVIDE (2).
Call Stack (most recent call first):
  CMakeLists.txt:429 (find_package)


CMake Error at /usr/share/cmake-3.16/Modules/FindProtobuf.cmake:476 (math):
  math cannot parse the expression: " / 1000 % 1000": syntax error,
  unexpected exp_DIVIDE (2).
Call Stack (most recent call first):
  CMakeLists.txt:429 (find_package)


CMake Error at /usr/share/cmake-3.16/Modules/FindProtobuf.cmake:477 (math):
  math cannot parse the expression: " % 1000": syntax error, unexpected
  exp_MOD (2).
Call Stack (most recent call first):
  CMakeLists.txt:429 (find_package)


CMake Warning at /usr/share/cmake-3.16/Modules/FindProtobuf.cmake:499 (message):
  Protobuf compiler version 3.13.0 doesn't match library version
  ERROR.ERROR.ERROR
Call Stack (most recent call first):
  CMakeLists.txt:429 (find_package)

Solution

  • Not sure how exactly do what I wanted to do above, but a hack to get CMake work for OpenPose is using Python venv and comment the anaconda python activation lines in ~/.bashrc:

    Now, cmake-gui .. throws no error:

    GCC detected, adding compile flags
    GCC detected, adding compile flags
    Building with CUDA.
    CUDA detected: 10.1
    Added CUDA NVCC flags for: sm_75
    cuDNN not found
    Found gflags  (include: /usr/include, library: /usr/lib/x86_64-linux-gnu/libgflags.so)
    Found glog    (include: /usr/include, library: /usr/lib/x86_64-linux-gnu/libglog.so)
    Caffe will be downloaded from source now. NOTE: This process might take several minutes depending
            on your internet connection.
    Caffe has already been downloaded.
    HEAD is now at 1807aada Added Ampere arch's (CUDA11)
    
    Caffe will be built from source now.
    Download the models.
    Downloading BODY_25 model...
    Model already exists.
    Not downloading body (COCO) model
    Not downloading body (MPI) model
    Downloading face model...
    Model already exists.
    Downloading hand model...
    Model already exists.
    Models Downloaded.
    Configuring done
    

    I have this in ~/.bashrc:

    # >>> conda initialize >>>
    # !! Contents within this block are managed by 'conda init' !!
    ##__conda_setup="$('/home/mona/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
    ##if [ $? -eq 0 ]; then
    ##    eval "$__conda_setup"
    ##else
    ##    if [ -f "/home/mona/anaconda3/etc/profile.d/conda.sh" ]; then
    ##        . "/home/mona/anaconda3/etc/profile.d/conda.sh"
    ##    else
    ##        export PATH="/home/mona/anaconda3/bin:$PATH"
    ##    fi
    ##fi
    

    and installed the following in Ubuntu 20.04:

    $ sudo apt-get install python3
    $ sudo apt-get install python3-venv
    

    also, do this in ~/.bashrc and source it: alias python=python3

    $ python -m venv ~/venv/openpose
    $ source ~/venv/openpose/bin/activate