0

XCode 4.5.2 で小さなサンプル CUDA コード matrixMul.cu をビルドしようとしています。やった:

  1. nvcc を実行して .cu ファイルをオブジェクト ファイルにコンパイルするカスタム スクリプト。
  2. 次に、xcode に cuda lib とリンクさせて、最終的な実行可能 MatrixMul を生成します。

ただし、リンク段階では、xcode は常に g++ ではなく .o ファイルに対して gcc を実行するため、エラーが発生します。

/Applications/Xcode.app/Contents/Developer/usr/bin/gcc -arch x86_64 -isysroot ...
Undefined symbols for architecture x86_64:
"std::ios_base::Init::Init()", referenced from:
  __static_initialization_and_destruction_0(int, int)in matrixMul.o
"std::ios_base::Init::~Init()", referenced from:
  ___tcf_0 in matrixMul.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

XCode で gcc の代わりに g++ を実行してオブジェクト ファイルをリンクする方法がわかりません。プロジェクトには .cu ファイルしかないので、c++ であることを示す .cpp はありません。ただし、最初に xcode プロジェクトを作成したときは C++ を選択します。ビルド設定でApple LLVMコンパイラまたはLLVM GCCを選択しても、gccが実行されます。

ありがとうございました!ゲイリー

4

1 に答える 1

2

XCode に強制的にリンクに g++ を使用させることはできないことがわかりましたが、「その他のリンカー フラグ」セクションに -lstdc++ を追加して、gcc が c++ ライブラリにリンクするようにするという回避策があります。

今のところうまくいきますが、これが唯一の/最善の解決策であるかどうかはわかりません. 誰か他の解決策があれば教えてください。

ゲイリー

于 2013-01-08T20:10:13.973 に答える