프로그래밍 코드 변경 후 연결 오류

프로그래밍 코드 변경 후 연결 오류

특정 숫자 생성기로 실행되는 프로그램이 있고 이미 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대단히 감사하겠습니다.

관련 정보