我有一个名为mexCodeCuda.cu的代码,它使用动态并行性。在matlab界面中,当我尝试执行以下命令时,我会得到以下错误:
system('nvcc --compile mexCodeCuda.cu -o mexCodeCuda.o --compiler-options -fPIC -m64 -rdc=true -gencode arch=compute_35,code=sm_35 -O3 -lineinfo -use_fast_math -lcudadevrt -I/cm/shared/apps/MATLAB/extern/include')
system('nvcc -arch=sm_35 -dlink mexCodeCuda.o -o dlink.o')
eval('mex mexCodeCuda.o dlink.o -L'CUDA_LIB_PATH '-lcudart')
它给出以下错误:
Error using mex
/usr/bin/ld: dlink.o: relocation R_X86_64_32S against `__nv_module_id' can
not be used when making a shared object; recompile with -fPIC
dlink.o: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
有人能帮我吗?提前感谢。。。
一些更改:
- 将
-fPIC
添加到第二个nvcc
命令中(使用--compiler-options
,就像使用第一个nvcc
一样) - 在
mex
命令(-lcudadevrt
)上指定cudadevrt
运行时选项,就像第一个nvcc
调用一样 - 您可能需要通过
LDCXXFLAGS
或LDFLAGS
将-fPIC
添加到mex链接中。不确定