プログラミングコード変更後の接続エラー

プログラミングコード変更後の接続エラー

特定の数値ジェネレータで実行されているプログラムがあり、すでに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ございます。

ベストアンサー1

おすすめ記事