OSX" clang ++ -lboost_mpi"` - >" ld:找不到-lboost_mpi"的库brew安装后加速--with-mpi

时间:2015-06-07 23:03:06

标签: c++ macos boost homebrew boost-mpi

使用brew安装带有mpi支持的boost后,当我运行ld: "library not found for -lboost_mpi"时,仍然会收到错误clang++ -lboost_mpi。我该怎么做才能克服这个问题?我使用brew安装了boost:

$ brew install boost --with-mpi --without-single
==> Downloading https://downloads.sourceforge.net/project/boost/boost/1.58.0/boost_1_58_0.tar.bz2
Already downloaded: /Library/Caches/Homebrew/boost-1.58.0.tar.bz2
==> ./bootstrap.sh --prefix=/usr/local/Cellar/boost/1.58.0 --libdir=/usr/local/Cellar/boost/1.58.0/lib --without-icu --without-libraries=python
==> ./b2 --prefix=/usr/local/Cellar/boost/1.58.0 --libdir=/usr/local/Cellar/boost/1.58.0/lib -d2 -j4 --layout=tagged --user-config=user-config.jam install t
  /usr/local/Cellar/boost/1.58.0: 10668 files, 300M, built in 10.9 minutes

如何成功使用clang++ -lboost_mpi

$ mdfind -name libboost_mpi
/usr/local/Cellar/boost/1.58.0/lib/libboost_mpi-mt.dylib
/usr/local/Cellar/boost/1.58.0/lib/libboost_mpi-mt.a

$ clang++ -I/usr/local/Cellar/boost/1.58.0/lib -lboost_mpi
ld: library not found for -lboost_mpi
clang: error: linker command failed with exit code 1 (use -v to see invocation)

1 个答案:

答案 0 :(得分:2)

当您在OSX上使用brew构建boost时的默认行为是标记的构建 - 如果您查看构建输出,您会看到如下内容:

./b2 --prefix=/usr/local/Cellar/boost/1.58.0 --libdir=/usr/local/Cellar/boost/1.58.0/lib -d2 -j8 --layout=tagged --user-config=user-config.jam install threading=multi link=shared,static

--layout=tagged导致多线程版本使用-mt进行后期修复。

这意味着你的boost_mpi库被称为:boost_mpi-mt,那就是你要链接的内容,因此你链接的库是libboost_mpi-mt,所以选项是-lboost_mpi-mt

您也可以查看该库的/usr/local/Cellar/boost/1.58.0/lib目录 - 它也会暗示这一点。

  

如果你想获得一个未标记的构建(即没有-mt),那么编辑增强配方(使用brew edit boost)并将--layout=tagged替换为{{1 }}。但是,这可能会导致其他事情破裂。