2013-01-06 72 views
1

我的项目在Linux机器上开发环境为CUDA 4.2Cuda 5.0链接错误

最近它升级到CUDA 5.0,现在编译失败并显示以下错误消息。

In file included from /opt/cuda/bin/crt/link.stub:79:0: 
/tmp/tmpxft_000018c8_00000000-1_GPUReax_dlink.reg.c:2:1: error: redefinition of 'const unsigned char def_module_id_str__NV_MODULE_ID []' 
/tmp/tmpxft_000018c8_00000000-1_GPUReax_dlink.reg.c:1:1: error: 'const unsigned char def_module_id_str__NV_MODULE_ID [19]' previously defined here 
/tmp/tmpxft_000018c8_00000000-1_GPUReax_dlink.reg.c: In function 'void __cudaRegisterLinkedBinary__NV_MODULE_ID(void (*)(void**), void*, void*)': 
/tmp/tmpxft_000018c8_00000000-1_GPUReax_dlink.reg.c:2:1: error: redefinition of 'void __cudaRegisterLinkedBinary__NV_MODULE_ID(void (*)(void**), void*, void*)' 
/tmp/tmpxft_000018c8_00000000-1_GPUReax_dlink.reg.c:1:1: error: 'void __cudaRegisterLinkedBinary__NV_MODULE_ID(void (*)(void**), void*, void*)' previously defined here 

我使用的是Linux机器

mctesla 93 $ uname -a 
Linux mctesla.cs.purdue.edu 3.7.1 #1 SMP Fri Dec 28 12:08:12 EST 2012 x86_64 Intel(R) Xeon(R) CPU E5606 @ 2.13GHz GenuineIntel GNU/Linux 
mctesla 94 $ 

可有人请就如何解决与CUDA 5.0环境这一问题发表评论。

更新-----

感谢您的迅速评论。

我昨天花了一整天追着这个问题..看着编译器的输出后,我发现下面的行....

NVCC -I(由*下面分开)。 -I/opt/cuda/include -D__USE_GPU__ -arch = sm_20 -Xptxas = -v -L/opt/cuda/lib64 -lm -lz -lcuda -lcudart GMRES.o QEq.o allocate.o analyze.o bond_orders.o box.o forces.o four_body_interactions.o grid.o init_md.o integrate.o list.o lookup.o neighbors.o param.o pdb_tools.o print_utils.o reset_utils.o restart.o single_body_interactions.o system_props.o three_body_interactions。 o traj.o two_body_interactions.o vector.o testmd.o cuda_utils.o cuda_copy.o cuda_init.o reduction.o center_mass.o helpers.o validation.o matrix.o matvec.o -o GPUReax

在包含的文件中从/opt/cuda/bin/crt/link.stub:79:0 :(*) /tmp/tmpxft_0000345f_00000000-1_GPUReax_dlink.reg.c:2:1:错误:的“const的无符号字符def_module_id_str__NV_MODULE_I重新定义d []” /tmp/tmpxft_0000345f_00000000-1_GPUReax_dlink.reg.c:1:1:错误: 'const的无符号字符def_module_id_str__NV_MODULE_ID [19]' 先前此处定义


错误是从文件link.stub未来文件,这是CUDA 5.0安装中的新增功能。该文件不在CUDA 4.2安装中。

如果这可以帮助别人指出问题。

感谢您的帮助。

苏德赫Kylasa


顺便说一句,这是我的Makefile

CC = g++ 
NVCC = nvcc 

LIBS = -L/opt/cuda/lib64 -lm -lz -lcuda -lcudart 

CFLAGS = -I. -Wall -O3 -funroll-loops -fstrict-aliasing 
NVCCFLAGS = -I. -I/opt/cuda/include -D__USE_GPU__ -arch=sm_20 -Xptxas=-v 

#-finline-functions -finline-limit=15 -g#-DTEST -pg -ldl -rdynamic -g 
DEFS = $(CFLAGS) 
NVCCDEFS = $(NVCCFLAGS) 

FLAG = $(DEFS) $(INCS) $(LIBS) 
NVCCFLAG = $(NVCCDEFS) $(LIBS) 

OBJ  = GMRES.o QEq.o allocate.o analyze.o bond_orders.o \ 
    box.o forces.o four_body_interactions.o \ 
    grid.o init_md.o integrate.o list.o \ 
    lookup.o neighbors.o param.o pdb_tools.o \ 
    print_utils.o reset_utils.o \ 
    restart.o single_body_interactions.o \ 
    system_props.o three_body_interactions.o \ 
    traj.o two_body_interactions.o vector.o \ 
    testmd.o \ 
    cuda_utils.o cuda_copy.o cuda_init.o reduction.o \ 
    center_mass.o helpers.o validation.o matrix.o matvec.o 

all: beta 

beta: $(OBJ) Makefile 
    $(NVCC) $(NVCCFLAG) $(OBJ) -o GPUReax 

param.o: param.c param.h mytypes.h traj.o 
    $(CC) $(DEFS) -c param.c 

traj.o: traj.c traj.h mytypes.h 
    $(CC) $(DEFS) -c traj.c 

restart.o: restart.c restart.h mytypes.h box.h 
    $(CC) $(DEFS) -c restart.c 

pdb_tools.o: pdb_tools.c pdb_tools.h mytypes.h box.h list.h restart.h param.h 
    $(CC) $(DEFS) -c pdb_tools.c 

print_utils.o: print_utils.h print_utils.c 
    $(CC) $(DEFS) -c print_utils.c 

grid.o: grid.h grid.c 
    $(CC) $(DEFS) -c grid.c 


analyze.o: analyze.h analyze.c 
    $(CC) $(DEFS) -c analyze.c 

integrate.o: integrate.h integrate.c 
    $(CC) $(DEFS) -c integrate.c 

vector.o: vector.h vector.cu 
    $(NVCC) $(NVCCDEFS) -c vector.cu 

system_props.o: system_props.h system_props.cu 
    $(NVCC) $(NVCCDEFS) -c system_props.cu 

cuda_copy.o: cuda_copy.h cuda_copy.cu 
    $(NVCC) $(NVCCDEFS) -c cuda_copy.cu 

cuda_utils.o: cuda_utils.h cuda_utils.cu 
    $(NVCC) $(NVCCDEFS) -c cuda_utils.cu 

cuda_init.o: cuda_init.h cuda_init.cu 
    $(NVCC) $(NVCCDEFS) -c cuda_init.cu 

reduction.o: reduction.h reduction.cu 
    $(NVCC) $(NVCCDEFS) -c reduction.cu 

center_mass.o: center_mass.h center_mass.cu 
    $(NVCC) $(NVCCDEFS) -c center_mass.cu 

box.o: box.h 
    $(NVCC) $(NVCCDEFS) -c box.cu 

init_md.o: init_md.h init_md.cu 
    $(NVCC) $(NVCCDEFS) -c init_md.cu 

helpers.o: helpers.h helpers.cu 
    $(NVCC) $(NVCCDEFS) -c helpers.cu 

GMRES.o: GMRES.h GMRES.cu 
    $(NVCC) $(NVCCDEFS) -c GMRES.cu 

neighbors.o: neighbors.cu neighbors.h 
    $(NVCC) $(NVCCDEFS) -c neighbors.cu 

reset_utils.o: reset_utils.h reset_utils.cu mytypes.h list.h vector.h 
    $(NVCC) $(NVCCDEFS) -c reset_utils.cu 

list.o: list.h 
    $(NVCC) $(NVCCDEFS) -c list.cu 

forces.o: forces.h forces.cu 
    $(NVCC) $(NVCCDEFS) -c forces.cu 

allocate.o: allocate.h allocate.cu 
    $(NVCC) $(NVCCDEFS) -c allocate.cu 

lookup.o: lookup.h lookup.cu 
    $(NVCC) $(NVCCDEFS) -c lookup.cu 

two_body_interactions.o: two_body_interactions.h two_body_interactions.cu 
    $(NVCC) $(NVCCDEFS) -c two_body_interactions.cu 

bond_orders.o: bond_orders.h bond_orders.cu 
    $(NVCC) $(NVCCDEFS) -c bond_orders.cu 

single_body_interactions.o: single_body_interactions.h single_body_interactions.cu 
    $(NVCC) $(NVCCDEFS) -c single_body_interactions.cu 

three_body_interactions.o: three_body_interactions.h three_body_interactions.cu 
    $(NVCC) $(NVCCDEFS) -c three_body_interactions.cu 

four_body_interactions.o: four_body_interactions.h four_body_interactions.cu 
    $(NVCC) $(NVCCDEFS) -c four_body_interactions.cu 

validation.o: validation.h validation.cu 
    $(NVCC) $(NVCCDEFS) -c validation.cu 

matrix.o: matrix.h matrix.cu 
    $(NVCC) $(NVCCDEFS) -c matrix.cu 

QEq.o: QEq.h QEq.cu 
    $(NVCC) $(NVCCDEFS) -c QEq.cu 

matvec.o: matvec.h matvec.cu 
    $(NVCC) $(NVCCDEFS) -c matvec.cu 

testmd.o: testmd.cu mytypes.h param.o traj.o restart.o pdb_tools.o list.o vector.o 
    $(NVCC) $(NVCCDEFS) -c testmd.cu 

clean: 
    rm -f *.o *~ core 
+0

我的猜测是CUDA 4.2的遗留问题仍然存在于您的机器上(构建环境或项目),因此您最终会混合使用库或同时链接到两个版本。 –

+0

也许给你的编译命令(nvcc命令行)可能有所帮助。如果这是一个项目,你可以做一个“干净”或类似的,这可能会有所帮助。您是否可以构建其他CUDA应用程序,或者在尝试构建时是否都以类似方式失败? –

+0

你做了一个“干净”吗? –

回答

1

我有同样的问题时,我想编译sm_35。我解决了这个问题,在NVCCFLAGS变量中替换为:

-arch=sm_20 by -gencode arch=compute_10,code=sm_10 -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 

希望它有帮助。