0

NVIDIAがリリースしたGPUコンピューティングSDKのcutil.hの関数にリンクしようとしています。

現時点では、この単純なコードをコンパイルしようとしています。

#include <iostream>
#include <cuda.h>
#include <cutil.h>

using namespace std;

int main(){
    unsigned int time_total;    
    cutCreateTimer(&time_total);
    return 0;
}

次のコマンドを使用します。

nvcc -I/home/sj755/NVIDIA_GPU_Computing_SDK/C/common/inc/ -L/home/sj755/NVIDIA_GPU_Computing_SDK/C/lib/libcutil_x86_64.a cutiltest.cu

次のエラーが発生する場合のみ:

/tmp/tmpxft_000077cc_00000000-13_cutiltest.o: In function `main':
tmpxft_000077cc_00000000-1_cutiltest.cudafe1.cpp:(.text+0x10): undefined reference to 

`cutCreateTimer'

collect2: ld returned 1 exit status

フラグを追加した場合、ldも-lcutilを見つけることができません。リンクすることになっている静的ライブラリがありますが、何らかの理由でこれはうまくいきません。これが私が試したことです:

  1. LD_LIBRARY_PATHに静的ライブラリへのパスが含まれるように.bashrcファイルを変更しました

    ##########<CULA>

    CULA_ROOT = / usr / local/culaをエクスポートします

    CULA_INC_PATH = $ CULA_ROOT/includeをエクスポートします

    CULA_BIN_PATH_32 = $ CULA_ROOT/binをエクスポートします

    CULA_BIN_PATH_64 = $ CULA_ROOT/bin64をエクスポートします

    CULA_LIB_PATH_32 = $ CULA_ROOT/libをエクスポートします

    CULA_LIB_PATH_64 = $ CULA_ROOT/lib64をエクスポートします

    ########## <CUDA>

    export PATH = $ PATH:/ usr / local / cuda / bin

    LD_LIBRARY_PATH =:/ usr / local / cuda/lib64をエクスポートします

    LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:$CULA_LIB_PATH_64をエクスポートします

    エクスポートLD_LIBRARY_PATH=$ LD_LIBRARY_PATH:/ usr / local / cuda / libnvvp /

    CUDA_SDK_ROOT_DIR = / home / sj755 / NVIDIA_GPU_Computing_SDK/Cをエクスポートします

    エクスポートLD_LIBRARY_PATH=$ LD_LIBRARY_PATH:$ CUDA_SDK_ROOT_DIR / lib

  2. 名前を変更libcutil_x86_64.aしてみましたがlibcutil.a、まだ何もありません。

  3. アーカイブを抽出し、共有オブジェクトファイルを作成し、それにリンクしてみました。

    ar -x libcutil_x86_64.a

    gcc -I / usr / include / GL / -L / usr / include / GL / -lglut -lGL -lGLU -lX11 -lXmu -lXi -lm -lpthread -shared * .cpp.o -o libcutil.so

    nvcc -lcutil -I /home/sj755/NVIDIA_GPU_Computing_SDK/C/common/inc/ -L /home/sj755/NVIDIA_GPU_Computing_SDK/C/lib/libcutil.so cutiltest.cu

以下を取得するためだけに/usr/bin/ld: cannot find -lcutil

ここで忘れているのはどのステップですか?

4

2 に答える 2

3

コンパイルステートメントが正しくありません。次のようになります。

nvcc -I$SDKROOT/C/common/inc -L$SDKROOT/C/lib cutiltest.cc -lcutil_x86_64

ここで、SDKROOTはSDKへのルートパスを保持します。

/home/sj755/NVIDIA_GPU_Computing_SDK

あなたの場合。ここで注意すべき重要な点は、ライブラリは、それを必要とするコードとオブジェクトの-lにオプションとして名前で渡される必要があるということです。コードスニペットを使用したOSXの具体例:

$ cat cutiltest.cc 

#include <iostream>
#include <cuda.h>
#include <cutil.h>

using namespace std;

int main(){
    unsigned int time_total;    
    cutCreateTimer(&time_total);
    return 0;
}


$ nvcc -I/Developer/GPU\ Computing/C/common/inc -L /Developer/GPU\ Computing/C/lib -o cutiltest cutiltest.cc -lcutil_i386


$ ls -l cutiltest
-rwxr-xr-x  1 talonmies  talonmies  117548 May 25 07:57 cutiltest

ただし、最後に、SDKキューティルライブラリを使用するという選択を再考する必要があります。SDKの例での使用のみを目的としています。これはCUDAの一部ではなく、ドキュメントもありません。動作することやバグが含まれていないことは保証されていません。また、SDKリリース間で一貫性がある(または存在する)ことも保証されていません。

于 2012-05-25T06:04:11.920 に答える
1

これはあなたの問題だけではありません。共有ライブラリのようにcutilとリンクしようとしていますか?このソリューションはNVIDIA開発者に投稿されました。ゾーンフォーラム

于 2012-05-25T05:30:32.273 に答える