使用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)
答案 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 }}。但是,这可能会导致其他事情破裂。