2011-07-28 45 views
1

テストのために、C(cuda)で行列乗算のコードを書いて、nvccを使ってそれをコンパイルして、次のコマンドを使って共有ライブラリを作成しました。nvccを使用してコンパイルされたCuda共有ライブラリを使用してOpenCVコードをコンパイルするには?

nvcc -c MatMul.cu -o libmatmul.so 

私はOpenCVコードをCで書いて、次のコマンドでコンパイルしようとしました。

gcc ImgMul.c `pkg-config --cflags --libs opencv` -L. -L/usr/local/cuda/lib64 -I/usr/local/cuda/include -I. -lmatmul -lcudart -o ImgMul 

エラーが発生しています。

gputest.c:(.text+0x3f): undefined reference to `matmul' 

gccでコードをコンパイルするときに、どのようにcudaライブラリを含めるか教えてもらえませんか。

OS:Ubuntuの GCC:

nvcc -c MatMul.cu -o libmatmul.so 

は共有ライブラリをしないことを確認する4.4.0

答えて

1

最初のポイント、それだけでオブジェクトファイルにコンパイルされます。共有ライブラリとオブジェクトファイルは全く同じものではありません。

それ以外の記号が見つかりませんでしたエラーの理由は、C++ name manglingです。 CUDAソースファイルのホストコードは、CではなくホストC++コンパイラを使用してコンパイルされます。したがって、コンパイラによって生成されるホストコードのシンボル名は、名前マングリングの影響を受けます。これを回避するには、宣言子extern "C"(C/C++相互運用性の妥当性の概要については、hereを参照)を使用して、プレーンCコードから呼び出す関数を宣言するのが最も簡単な方法です。

+0

ありがとうございました.... –

関連する問題