【问题标题】:Undefined reference error - MPI compilation未定义的引用错误 - MPI 编译
【发布时间】:2013-12-25 07:06:51
【问题描述】:

我正在尝试分别编译一个 CUDA 文件和一个 MPI 文件,然后将它们链接在一起。代码文件如下:

stras.h

void pr(void);

stras.cu

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

mm_mpi.c

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

制作文件

# 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 $@ -c $<

main.o: mm_mpi.c
    $(MPICC) -o $@ -c $<

stras: stras.o main.o
    $(MPICC) $(CCFLAGS) -o $@ $+ $(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++ 不是很精通。如果我错过了什么,谁能告诉我?提前致谢。

【问题讨论】:

  • @Bit Fiddleing Code Monkey - 如您所见,我已经添加了它。标准包含后,这是第一个#include

标签: c++ c cuda mpi header-files


【解决方案1】:

这有望解决您的问题:

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

原因,就像您尝试从 C++ 目标文件中导出符号以供其他链接器使用时一样:您应将其显式声明为 "C" 类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    相关资源
    最近更新 更多