使用 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 -vmpic++ --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++的主要内容,如果未能解决你的问题,请参考以下文章

使用 Xcode 4.2 为 iOS 3.1.3 编译

使用 setDataSource 升级到 Xcode 4.6 后出现编译器错误

XCode 4、Armadillo 和 XCode 标准库

XCode 4.3 - 从 XCode 4.2 升级后 perl 找不到 C 编译器

IOS使用xcode编译代码

有没有办法在 Xcode 4 中为 ARM 而不是 Thumb 编译?