CMake无法在带有brew的OS X上找到Boost



我正试图使用CMake编译另一个库,它需要Boost。

我已经在OS X 10.10 Yosemite上使用brew安装了CMake和Boost,但CMake拒绝找到它。Boost位于/usr/local/Cellar/boost/1.55.0_2

我试过以下几种:

  • 用上述路径设置-DBoost_DIR-DBOOST_ROOT
  • 用上述路径+/include设置-DBoost_INCLUDE_DIR-DBOOST_INCLUDEDIR
  • 在CMakeLists.txt文件中设置所有这些选项
  • 我自己编译Boost,并将上面的变量指向我自己的构建
  • 在这里、这里和这里尝试相同问题的类似解决方案。我在OSX上找到的唯一答案是这个,同样的解决方案对我不起作用

为什么CMake公然无视我的指示?:(

编辑:从-DBoost_DEBUG=ON 获取输出

我发现了一个单独的boost-python自制软件包。安装后,CMake确实找到了Boost:

brew install boost-python

给我

> mkdir build ; ( cd build ; cmake .. )
-- The C compiler identification is AppleClang 6.0.0.6000056
-- The CXX compiler identification is AppleClang 6.0.0.6000056
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Found PythonInterp: /usr/local/bin/python (found version "2.7.9")
-- Found PythonLibs: /usr/lib/libpython2.7.dylib (found version "2.7.5")
-- Boost version: 1.56.0
-- Found the following Boost libraries:
--   python
-- Configuring done
-- Generating done

(我链接有问题,但那是另一回事)

我在用C++/Python/Boost/CMake编译某些东西时也遇到了问题(具体来说,我正在尝试构建https://github.com/mapillary/OpenSfM)。

我收到了一个类似的错误

Linking CXX shared library .../OpenSfM/opensfm/csfm.so
Undefined symbols for architecture x86_64:
  "boost::python::instance_holder::deallocate(_object*, void*)", referenced from:
Undefined symbols for architecture x86_64:
"boost::python::instance_holder::deallocate(_object*, void*)", referenced from:
...

受上述评论的启发,我试图找到这条神话般的"助推蟒蛇",但它并不存在。相反,我最终使用自制程序用python重新安装了正常的boost。

brew install boost --with-python

奏效了。CMake现在可以找到boost和它所需要的任何python boost,编译成功了。

在我的案例中,将cmake和boost升级到它们的最新版本解决了问题

brew upgrade boost cmake

最新更新