0

使用 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)
4

1 回答 1

3

在 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),则编辑boost 配方(使用brew edit boost)并将 替换--layout=tagged--layout=system. 不过,这可能会导致其他事情中断。

于 2015-06-08T15:39:08.037 回答