1

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 (タグ)、ia(通信)、値(値) ^ ~~~~

ただし、次を使用してコンパイルおよび実行できます

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

spec ファイルが 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

4

1 に答える 1

0

したがって、これは機能します:

バイナリをリンク:

libmpi_cxx.dylib
libmpi.dylib
libboost_mpi.dylib
libboost_serialization.dylib

コンパイラ (ビルド オプションの下) を LLVM GCC 4.2 に変更します (mpic++ を直接実行すると、内部で llvm gcc 4.2 を使用していると報告されます)。

ターゲットの下で、フェーズをビルドし、ソースをコンパイルし、コンパイラ オプション「-lm」を追加して、libm とリンクする必要があることを報告します。mpic++ --showme:link を指摘してくれた @pyCthon の功績により、コマンドラインから正常にビルドできる最終的なライブラリが明らかになりました

于 2013-02-05T22:28:26.010 に答える