我正在研究 DNA 片段组装程序。仅 CPU 版本是使用 GCC 以 C 语言构建的,我正在尝试使用 NVCC 构建 GPU 版本。
这是生成文件
all : clean FragmentAssembly.exe
FragmentAssembly.exe : Common.o Fragment.o ILS.o Consensus.o main.o
nvcc -pg -o FragmentAssembly.exe Common.o Fragment.o ILS.o Consensus.o main.o
Common.o : Common.cu
nvcc -pg -o Common.o -c Common.cu
Fragment.o : Fragment.cu
nvcc -pg -o Fragment.o -c Fragment.cu
ILS.o : ILS.cu
nvcc -pg -o ILS.o -c ILS.cu
Consensus.o : Consensus.cu
nvcc -pg -o Consensus.o -c Consensus.cu
main.o : main.cu
nvcc -pg -o main.o -c main.cu
clean :
rm -f *.exe *.o
如图所示,原始.c
文件变成了 .cu 文件,nvcc
以便正确编译它们。除了main.cu
.
ILS.h 包含全局变量的定义p_instanceFragments
和p_instanceLength
问题是在编译 NVCC 时,由于未知原因,我收到以下错误:
Consensus.o:(.bss+0x0): multiple definition of `p_instanceFragments'
ILS.o:(.bss+0x0): first defined here
Consensus.o:(.bss+0x8): multiple definition of `p_instanceLength'
ILS.o:(.bss+0x8): first defined here
没有真正的多重定义,因为使用 GCC 正确构建了相同的代码。看起来好像ILS.h
被两次包含在 nvcc 中,分别是ILS.cu
和Consensus.cu
。这也是不可能的,因为我已经用#ifndef .. #define .. #endif
语句包装了所有头文件,以避免多次包含和无限包含循环。
也许与makefile命令有关?还是我应该使用 gcc 进行链接?你能告诉我如何处理吗?
问候,