在架构x86_64中找不到CUDA,OSX,MPI符号

时间:2014-07-11 08:22:12

标签: macos cuda makefile mpi nvcc

Helllo,我有一些代码,我正在尝试编译。代码在Linux上运行良好,但我无法在OSX上编译它。

在我用于Linux的makefile中:

LD_FLAGS    = -lcudart -L$(CUDA_HOME)/lib64

对于Mac,我尝试使用这些标志:

LD_FLAGS    = -lcudart -L$(CUDA_HOME)/lib
LD_FLAGS    = -lm  -F/Library/Frameworks -framework CUDA

CXXFLAGS    = -O3 -g -m32 -I$(CUDA_HOME)/include
NVCC_FLAGS  = -O3 -g -G -I$(CUDA_HOME)/include -arch=sm_11

这是make输出文件:

mpic++ -c -o main.o main.cpp -O3 -m32 -I/Developer/NVIDIA/CUDA-5.0/include

/Developer/NVIDIA/CUDA-5.0/bin/nvcc -c -o kernel.o kernel.cu -O3 -I/Developer/NVIDIA/CUDA-5.0/include -arch=sm_11
ptxas /tmp/tmpxft_000026f4_00000000-5_kernel.ptx, line 146; warning : Double is not supported. Demoting to float
/Developer/NVIDIA/CUDA-5.0/bin/nvcc -c -o support.o support.cu -O3 -I/Developer/NVIDIA/CUDA-5.0/include -arch=sm_11
mpic++ main.o kernel.o support.o -o stencil-mpi -lcudart -L/Developer/NVIDIA/CUDA-5.0/lib
ld: warning: ld: warning: ignoring file kernel.o, file was built for i386 which is not the architecture being linked (x86_64): kernel.o
ignoring file main.o, file was built for i386 which is not the architecture being linked (x86_64): main.o

ld: warning: ignoring file support.o, file was built for i386 which is not the architecture being linked (x86_64): support.o
Undefined symbols for architecture x86_64:
  "_main", referenced from:
      start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [stencil-mpi] Error 1

1 个答案:

答案 0 :(得分:1)

此问题是由于尝试在CUDA和MPI工具链之间混合32位和64位编译引起的。在评论中指出,为-m64-m32LD_FLAGS添加CXXFLAGS而不是NVCC_FLAGS会产生有效的64位版本。