2012-04-06 5 views
0

GNUコンパイラがリンクするためにnVIDIAコンパイラを使用して共有ライブラリを生成したい。実行時まですべてがうまくいく。以下はその詳細です。ありがとう!リンクするGNUコンパイラの共有ライブラリを生成するためにnVIDIAコンパイラを使用するとランタイムエラーが発生する

main.cppに:

#include <iostream> 

using namespace std; 

void fcudadriver(); 

int main() 
{ 
    cout<<"Maine "<<endl; 
    fcudadriver(); 
    return 0; 
} 

test.cu:

__global__ void fcuda() 
{ 
} 

void fcudadriver() 
{ 
    fcuda<<<1,1>>>(); 
} 

コンパイル:

nvcc --compiler-options '-fPIC' -o libtest.so --shared test.cu 
g++ main.cpp -L. -ltest 

ラン:

./a.out 

の結果:

./a.out: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory 

答えて

1

.は、実行時リンカーは共有ライブラリを探して、あなたのLD_LIBRARY_PATHにする必要があります。

試してみてください。

$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. ./a.out 
+0

それは働きます!ありがとう! –

+2

これはg ++とは関係ありません。実行時リンカーは、/etc/ld.so.confと環境変数LD_LIBRARY_PATHによって制御される一連のパスで共有ライブラリを探します。それがLinux上で動作する方法です。 (そして、setuidプログラムで注目すべきいくつかの注意点があります。) 'man ld.so' – Mat

関連する問題