链接到GPU计算SDK中的cutil

时间:2012-05-25 03:44:45

标签: gcc compilation cuda nvcc

我一直在尝试链接到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. 我已经更改了我的.bashrc文件,以便LD_LIBRARY_PATH包含静态库的路径

    ##########&LT; CULA&gt;

    导出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

    export CULA_LIB_PATH_32 = $ CULA_ROOT / lib

    导出CULA_LIB_PATH_64 = $ CULA_ROOT / lib64

    ##########&LT; CUDA&gt;

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

    export LD_LIBRARY_PATH =:/ usr / local / cuda / lib64

    export LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:$ CULA_LIB_PATH_64

    export LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:/ usr / local / cuda / libnvvp /

    导出CUDA_SDK_ROOT_DIR = / home / sj755 / NVIDIA_GPU_Computing_SDK / C

    export 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

  4. 仅获取以下/usr/bin/ld: cannot find -lcutil

    我在这里忘记了什么步骤?

2 个答案:

答案 0 :(得分: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选项传递。 OS X上使用您的代码片段的具体示例:

$ 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 cutils库的选择。它仅适用于SDK示例。它不是CUDA的一部分,它没有文档,不能保证工作或不包含错误,并且不保证从一个SDK版本到另一个版本保持一致(甚至存在)。

答案 1 :(得分:1)

这不仅是你的问题。您是否尝试使用共享库链接cutil?此解决方案已发布在NVIDIA dev. zone forum