0

I installed boost from the source file in CentOS7, I do these steps :

I checked and all file was correctly in /opt/boost/lib

enter image description here

then I want to compile my project but CMake couldn't find the correct version of boost :

I compile it whit this command :

cmake -DBOOST_INCLUDEDIR=/opt/boost/lib/ -DCMAKE_BUILD_TYPE=Debug .. -G "Unix Makefiles"

I got this Error :

CMake Error at /usr/local/share/cmake-3.12/Modules/FindBoost.cmake:2048 (message):
Unable to find the requested Boost libraries.

Boost version: 1.53.0

Boost include path: /usr/include

Detected version of Boost is too old. Requested version was 1.67 (or newer). Call Stack (most recent call first): CMakeLists.txt:13 (FIND_PACKAGE)

what should I do?

Parisa.H.R
  • 3,303
  • 3
  • 19
  • 38
  • 1
    Please don't post screenshots for error messages that can be easily copy-pasted as code. It makes your question inaccessible to search engines and people with visual impairments that have to rely on screen reader technology. – ComicSansMS Jun 25 '22 at 05:44

1 Answers1

1

You should not try and specify the include and library directories directly, instead, give the root directory (sometimes called installation prefix) as a hint to the find call.

You currently do -DBOOST_INCLUDEDIR=/opt/boost/lib/, but /opt/boost/lib does not actually contain any header files, so it's not a valid include directory, but rather the library directory. While it is possible to specify both library and include directories explicitly, doing so is fiddly and error-prone and therefore not recommended.

Instead you should provide the root directory for the library. When installing the library you will eventually end up with a directory structure like this:

/opt
  + boost
     + include
       + <all header files in here>
     + lib
       + <all library (.a and .so) files in here>

The root directory is the directory that contains both the include and library directories, so in this case it would be /opt/boost.

In CMake versions 3.12 and higher, find_package considers the <PackageName>_ROOT CMake variable and the <PackageName>_ROOT system environment variable as search hints. Additionally, the Boost find script that ships with CMake supports the BOOST_ROOT and BOOSTROOT CMake variables as search hints since pretty much forever.

So your command line really should look like this:

cmake -DBOOST_ROOT=/opt/boost -DCMAKE_BUILD_TYPE=Debug .. -G "Unix Makefiles"

If that still doesn't work, it most probably means that you're dealing with a non-standard directory layout. Consult the documentation for the FindBoost script to figure out how to pass additional hints for such a situation, but really, I would strongly recommend to switch the directory layout instead.

ComicSansMS
  • 51,484
  • 14
  • 155
  • 166