2013-12-08 40 views
0

我想单独编译CUDA文件和MPI文件,然后将它们链接在一起。代码文件如下:未定义的参考错误 - MPI编译

stras.h

void pr(void); 

stras.cu

#include "stras.h" 
//.. 
void pr(){ 
printf("ok"); 
} 
//... 

mm_mpi.c

//.. 
#include "stras.h" 
pr(); 
//.. 

的makefile

# Location of the CUDA Toolkit binaries and libraries 
CUDA_PATH  ?= /usr/local/cuda-5.0 
CUDA_INC_PATH ?= $(CUDA_PATH)/include 
CUDA_BIN_PATH ?= $(CUDA_PATH)/bin 
CUDA_LIB_PATH ?= $(CUDA_PATH)/lib 

# Common binaries 
NVCC   ?= $(CUDA_BIN_PATH)/nvcc 
GCC    ?= g++ 

# MPI check and binaries 
MPICC   = /usr/bin/mpicc 

# OS-specific build flags 
LDFLAGS := -L$(CUDA_LIB_PATH) -lcudart 
CCFLAGS := -m32 

# Target rules 
all: build 

build: stras 

stras.o: stras.cu 
    $(NVCC) -o [email protected] -c $< 

main.o: mm_mpi.c 
    $(MPICC) -o [email protected] -c $< 

stras: stras.o main.o 
    $(MPICC) $(CCFLAGS) -o [email protected] $+ $(LDFLAGS) 

run: build 
    ./stras 

clean: 
    rm -f stras.o main.o 

但它给我的错误:

/usr/local/cuda-5.0/bin/nvcc -o stras.o -c stras.cu 
/usr/bin/mpicc -o main.o -c mm_mpi.c 
/usr/bin/mpicc -m32 -o stras stras.o main.o -L/usr/local/cuda-5.0/lib -lcudart -I 
main.o: In function `main': 
mm_mpi.c:(.text+0x6a3): undefined reference to `pr' 
collect2: ld returned 1 exit status 
make: *** [stras] Error 1 

我不是在C/C是精通++。任何人都可以告诉我,如果我错过了什么?提前致谢。

+0

@Bit提琴代码猴 - 正如你所看到的,我已经添加了它。标准包含后,这是第一个#包括 – Maddy

回答

3

预计这将解决你的问题:

/* This is stras.h */ 
#ifdef __CUDACC__ 
extern "C" void pr(void); 
#else 
extern void pr(void); 
#endif 

究其原因,就是喜欢它,当你试图给一个符号从C++对象文件导出为其他接头使用方法:你要明确声明它作为"C"类型。