使用 NVCC 编译器通过 main.cu 编译 cpp 辅助函数

问题描述 投票:0回答:1

我在创建 Makefile 将我的主文件编译为 .cu 文件并将我的辅助函数编译为 cpp 文件时遇到问题。我使用 cpp 的原因是辅助函数“sequence.cpp”只是我在 main.cu 中使用的一个类。

CXX = nvcc

CFLAGS = -std=c++17 -g
LDFLAGS =  -lcudart -lcudadevrt

main: main.o sequence.o
    $(CXX) $(CFLAGS) -o main main.o sequence.o $(LDFLAGS)

main.o: main.cu
    $(CXX) $(CFLAGS) -c main.cu -o main.o
sequence.o: sequence.cpp
    $(CXX) $(CFLAGS) -c sequence.cpp -o sequence.o

clean:
    rm -f main main.o sequence.o

当我运行“make”进行编译时,我得到以下输出/错误

nvcc -std=c++17 -g -c main.cu -o main.o
main.cu
tmpxft_0000798c_00000000-10_main.cudafe1.cpp
nvcc -std=c++17 -g -o main main.o sequence.o -lcudart -lcudadevrt
main.o
sequence.o
cl : Command line warning D9024 : unrecognized source file type 'main.o', object file assumed    
cl : Command line warning D9024 : unrecognized source file type 'sequence.o', object file assumed
sequence.o : fatal error LNK1112: module machine type 'x86' conflicts with target machine type 'x64'

我最初想删除“-o main.o”和“-oequence.o”。从我在网上发现的情况来看,c1编译器正在被选择而不是NVCC,并且当我认为我的“CXX = nvcc”可以做到这一点时,不知道如何说使用NVCC。我尝试的另一件事是使用另一个编译器命令“CPP = gcc” “对于我的序列文件。我认为这是最直接的方法。我应该将我的辅助函数设为 cu 文件吗?谢谢!

(更新)我现在看到错误消息“x86”与目标机器类型“x64”冲突。此错误消息是否也与无法识别的源文件main.o和sequence.o有关?谢谢!

makefile cuda compiler-construction nvcc
1个回答
0
投票

错误报告其中一个 .o 文件是 32 位(由于历史原因被描述为 x86),另一个是 64 位 (x64)。

从 make 输出来看,sequence.cpp 似乎没有重新编译,因此推测它之前是使用不同的体系结构进行编译的。尝试删除两个 .o 文件并再次运行 make。

© www.soinside.com 2019 - 2024. All rights reserved.