![프로그래밍 코드 변경 후 연결 오류](https://linux55.com/image/191152/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%20%EC%BD%94%EB%93%9C%20%EB%B3%80%EA%B2%BD%20%ED%9B%84%20%EC%97%B0%EA%B2%B0%20%EC%98%A4%EB%A5%98.png)
특정 숫자 생성기로 실행되는 프로그램이 있고 이미 CUDA(CURAND)에 있는 다른 프로그램으로 전환하여 makefile
그에 따라 프로그램을 변경하려고 시도했지만 이로 인해 이해할 수 없는 연결 오류가 발생했습니다.main()
다음 오류가 발생합니다.
nvcc -lm -lpthread main.o parser.o black_scholes.o -o hw1.x
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: main.o: in function `main':
main.c:(.text+0xe5): undefined reference to `black_scholes'
collect2: error: ld returned 1 exit status
make: *** [Makefile:24: hw1.x] Error 1
이 내 꺼야 makefile
:
include Makefile.include
HW1_INCS = black_scholes.h parser.h timer.h util.h
HW1_C_SRCS = main.c parser.c
HW1_CUDA_SRCS = black_scholes.cu
HW1_C_OBJS = $(HW1_C_SRCS:.c=.o)
HW1_CUDA_OBJS = $(HW1_CUDA_SRCS:.cu=.o)
HW1_EXE = hw1.x
all: hw1.x
%.o: %.c
$(CC) -c $(CCFLAGS) $(ACCFLAGS) $< -o $@
%.o: %.cu
$(CC) -c $(CCFLAGS) $(ACCFLAGS) $< -o $@
hw1.x: $(HW1_C_OBJS) $(HW1_CUDA_OBJS)
$(CC) $(LDFLAGS) $(HW1_C_OBJS) $(HW1_CUDA_OBJS) -o $@
black_scholes.o: black_scholes.cu black_scholes.h util.h
main.o: main.c black_scholes.h parser.h
parser.o: parser.c parser.h
util.o: util.c util.h
clean:
rm -f $(HW1_C_OBJS) $(HW1_CUDA_OBJS) $(HW1_EXE)
이 내 꺼야makefile.include
CC = nvcc
COPTFLAGS = -O2
CPPFLAGS =
CFLAGS = $(COPTFLAGS)
LINKER = nvcc
LDFLAGS = -lm -lpthread
관련이 있다면 여기 내 것이 있습니다.main()
#include "black_scholes.h"
#include "parser.h"
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char* argv[])
{
confidence_interval_t interval;
double S, E, r, sigma, T;
int M = 0;
char* filename = NULL;
int nthreads = 1;
double t1, t2;
if (argc < 3)
{
fprintf (stderr,
"Usage: ./hw1.x <filename> <nthreads>\n\n");
exit (EXIT_FAILURE);
}
filename = argv[1];
nthreads = to_int (argv[2]);
parse_parameters (&S, &E, &r, &sigma, &T, &M, filename);
black_scholes (&interval, S, E, r, sigma, T, M, nthreads);
printf ("Black-Scholes benchmark:\n"
"------------------------\n"
"S %g\n"
"E %g\n"
"r %g\n"
"sigma %g\n"
"T %g\n"
"M %d\n",
S, E, r, sigma, T, M);
printf ("Confidence interval: (%g, %g)\n", interval.min, interval.max);
return 0;
}
명확하게 연결 black_scholes
했기 main()
때문에 이런 일이 발생하는 이유를 잘 이해할 수 없습니다. 코드에서 이전 숫자 생성기를 제거했을 때 발생하기 시작했고 적절하게 변경한 후에도 계속 발생했습니다 make
. 수정에 대한 도움을 주시면 make
대단히 감사하겠습니다.