gpt4 book ai didi

c++ - undefined reference 错误 - MPI 编译

转载 作者:太空宇宙 更新时间:2023-11-04 07:22:35 25 4
gpt4 key购买 nike

我正在尝试分别编译一个 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++ 不是很精通。如果我错过了什么,谁能告诉我吗?提前致谢。

最佳答案

这有望解决您的问题:

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

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

关于c++ - undefined reference 错误 - MPI 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20449177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com