我一直试图链接到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。有一个静态库,我应该链接到,但由于某种原因,这是行不通的。以下是我尝试过的:
libcutil_x86_64.a重命名为libcutil.a,但仍然没有。只得到以下/usr/bin/ld: cannot find -lcutil
我在这里忘记了什么步骤?
发布于 2012-05-25 06:04:11
您的编译语句不正确。它应该是这样的:
nvcc -I$SDKROOT/C/common/inc -L$SDKROOT/C/lib cutiltest.cc -lcutil_x86_64SDKROOT保存SDK的根路径,它看起来是
/home/sj755/NVIDIA_GPU_Computing_SDK在你的案子里。这里要注意的关键是,库必须在需要它的代码和对象之后以名称形式传递为-l选项。在OS上使用代码片段的一个具体示例:
$ 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的一部分,它没有文档,它不能保证工作或不包含bug,也不能保证从一个SDK版本到另一个SDK版本之间是一致的(甚至是现在的)。
发布于 2012-05-25 05:30:32
这不仅仅是你的问题。您是否试图像使用共享库那样与cutil链接?这个解决方案是在NVIDIA开发公司。区域论坛上发布的
https://stackoverflow.com/questions/10748219
复制相似问题