【问题标题】:Link to cutil in GPU Computing SDKGPU计算SDK中的cutil链接
【发布时间】:2012-05-31 16:05:25
【问题描述】:

我一直在尝试链接到英伟达发布的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_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

    ##########

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

我在这里忘记了哪一步?

【问题讨论】:

    标签: gcc compilation cuda nvcc


    【解决方案1】:

    您的编译语句不正确。它应该看起来像这样:

    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 上使用您的代码 sn-p 的具体示例:

    $ 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 版本到另一个版本的一致性(甚至存在)。

    【讨论】:

    • 它工作!谢谢。我应该告诉你,我不会用它作为选择。我正在与出于某种原因使用它的第三方库合作。我别无选择,只能使用它。
    【解决方案2】:

    这不仅仅是你的问题。您是否尝试像与共享库一样与 cutil 链接?该解决方案发布于NVIDIA dev. zone forum

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 2012-03-22
      相关资源
      最近更新 更多