0

我一直在尝试链接到 NVIDIA 发布的 GPU Computing 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 包含静态库的路径

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

    导出 CULA_ROOT=/usr/local/cula

    出口 CULA_INC_PATH=$CULA_ROOT/包括

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

    导出 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.alibcutil.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按名称作为选项传递。使用您的代码片段在 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 版本到另一个版本的一致性(甚至存在)。

于 2012-05-25T06:04:11.920 回答
1

这不仅仅是你的问题。您是否尝试像与共享库一样与 cutil 链接?此解决方案已发布在NVIDIA 开发人员上。区论坛

于 2012-05-25T05:30:32.273 回答