我一直在尝试链接到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。 我应该链接到一个静态库,但由于某种原因,这永远不会成功。这是我试过的:
我已经更改了我的.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
我也尝试将libcutil_x86_64.a
重命名为libcutil.a
,但仍然没有。
尝试提取存档,创建共享对象文件并链接到它:
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
我在这里忘记了什么步骤?
答案 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
上