使用 Xcode 4 编译使用 Boost::mpi 的 C++
Posted
技术标签:
【中文标题】使用 Xcode 4 编译使用 Boost::mpi 的 C++【英文标题】:Compiling C++ that uses Boost::mpi with Xcode 4 【发布时间】:2013-01-19 14:47:07 【问题描述】:我正在尝试从 Xcode4 运行以下简单示例:
#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <iostream>
namespace mpi = boost::mpi;
int main(int argc, char* argv[])
mpi::environment env(argc, argv);
mpi::communicator world;
std::cout << "I am process " << world.rank() << " of " << world.size()
<< "." << std::endl;
return 0;
我已将 libboost_mpi 和 libboost_serialization 添加到 Xcode,并使用默认 LLVM 进行编译返回:
/usr/local/include/boost/mpi/communicator.hpp:1329:9:错误:调用 'boost::mpi::communicator' 的隐式删除的复制构造函数 : comm(comm)、source(source)、tag(tag)、ia(comm)、value(value) ^ ~~~~
但是,我可以使用
编译和运行mpic++ -I/usr/local/include main.cpp -L/usr/local/lib -lboost_mpi -lboost_serialization
虽然 mpic++ 似乎正在调用 LLVM:
$mpic++
i686-apple-darwin11-llvm-g++-4.2:没有输入文件
无论如何,我尝试在 Xcode 4 中添加 mpic++ 作为编译器选项。我可以运行
$ sudo opensnoop -n Xcode | grep mpicc.xcspec
并看到 Xcode 正在加载规范文件,但我没有看到任何 MPICC 选项。我的规范文件相当简单:
/**
Xcode Compiler Specification for MPICC
*/
Type = Compiler;
Identifier = com.apple.compilers.mpicc;
BasedOn = com.apple.compilers.gcc.4_2;
Name = “MPICC”;
Version = “Default”;
Description = “MPI GNU C/C++ Compiler 4.0″;
ExecPath = “/usr/local/bin/mpicc”;
PrecompStyle = pch;
它存储在
/Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/LLVM GCC 4.2.xcplugin/Contents/Resources/mpicc.xcspec
【问题讨论】:
你编译了 Boost MPI 吗?您需要将其与其余的 boost 库分开编译 是的。我已经编译并安装了 BoostMPI,并且我有 openmpi 用于实际的 mpi 实现 可能把sudo opensnoop -n Xcode | grep mpicc.xcspec
的输出改成mpic++
的输出
或尝试链接您单独使用的任何版本的 mpi 并使用 clang 或 g++ 编译
使用mpic++ --showme:link -v
和mpic++ --showme:compile -v
的输出
【参考方案1】:
所以这行得通:
将二进制链接到:
libmpi_cxx.dylib
libmpi.dylib
libboost_mpi.dylib
libboost_serialization.dylib
将编译器(在构建选项下)更改为 LLVM GCC 4.2(通过直接运行 mpic++ 提示,它报告它在内部使用 llvm gcc 4.2)
在targets、build phase、compile sources下,添加编译器选项“-lm”,报告需要链接libm。感谢@pyCthon 指出 mpic++ --showme:link 揭示了允许它从命令行成功构建的最终库
【讨论】:
以上是关于使用 Xcode 4 编译使用 Boost::mpi 的 C++的主要内容,如果未能解决你的问题,请参考以下文章
使用 setDataSource 升级到 Xcode 4.6 后出现编译器错误