2

私はHPCに取り組んでいます。その HPC には古いバージョンの Boost がインストールされており、Boost ライブラリには Boost.MPI がありません。管理者に HPC へのインストールを依頼しました。しかし、彼らは私にそれを私のホームディレクトリにインストールするように要求しました。だから私は自分のホームディレクトリにboostとboost.mpiの両方をインストールしました。Boost ライブラリは正しく動作しているようです。しかし、以下のコマンドで次のコードを実行しようとすると、エラーが発生しました。

テストコード:

#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;
}

ビルド コマンド:

 mpiCC -I/home1/username/boost/include 
-I/usr/mpi/gcc/openmpi-1.2.8/include/
-L/home1/username/boost/lib 
-L/usr/mpi/gcc/openmpi-1.2.8/lib64/openmpi 
-lboost_mpi-gcc-mt-1_35  testboostmpi2.cpp

次のエラーが叫んでいます。

testboostmpi2.o: In function `main':
testboostmpi2.cpp:(.text+0x59): undefined reference to     
`boost::mpi::environment::environment(int&, char**&, bool)'
testboostmpi2.cpp:(.text+0x63): undefined reference to 
`boost::mpi::communicator::communicator()'
 testboostmpi2.cpp:(.text+0x86): undefined reference to 
`boost::mpi::environment::~environment()'
testboostmpi2.cpp:(.text+0xb9): undefined reference to 
`boost::mpi::environment::~environment()'

どなたかお役に立てれば幸いです。

4

2 に答える 2

3

-Wl,--rpathg++ を使用していると仮定すると、リンカー オプションを使用してみることができます。

mpiCC testboostmpi2.cpp -I/home1/username/boost/include-I/usr/mpi/gcc/openmpi-1.2.8/include/ \
    -L/home1/username/boost/lib -L/usr/mpi/gcc/openmpi-1.2.8/lib64/openmpi \
    -lboost_mpi-gcc-mt-1_35 -Wl,-rpath -Wl,/home1/username/boost/lib \
    -Wl,-rpath -Wl,/usr/mpi/gcc/openmpi-1.2.8/lib64/openmpi

また、正しい順序でリンクするには、ソース ファイルを最後ではなく最初の引数として配置する必要があります。

于 2010-04-09T06:33:28.930 に答える
2

残念ながら、boost 1.41 を使用しているため、正確な比較はできません。ただし、含めなかった場合-lboost_mpi(新しいライブラリ命名規則)、まったく同じエラーが発生しました。したがって、ディレクトリが正しいこと、およびディレクトリに含まれるべきと思われるものが含まれていることを確認します。

于 2009-11-24T03:36:30.190 に答える