Как я могу заставить gcc makefile скомпилировать OpenAcc с помощью PGCC?

У меня есть make-файл, который изначально был написан для компиляции gccоднако я добавил OpenACC в свой код, и я хочу, чтобы он скомпилировал его, я изменил строку компиляции на следующую: $(CC) -fast $(CPPFLAGS) $< -o $@ и пытаюсь бежать make CC='path/to/pgcc/' but I got an undefined reference error in ld`, я предполагаю, что это потому, что я не менял строки, относящиеся к части связывания, но я не знаю, как это сделать, и Google не сильно помог.

Вот мой текущий make-файл

      
LDFLAGS += -Ldcmt0.4/lib -ldcmt

HW1_INCS = black_scholes.h gaussian.h parser.h random.h timer.h util.h
HW1_C_SRCS = black_scholes.c gaussian.c main.c parser.c random.c dcmt0.4/lib/random_seed.c timer.c util.c
HW1_C_OBJS = $(HW1_C_SRCS:.c=.o)
HW1_EXE = hw1.x


all: hw1.x

%.o: %.c
    $(CC) -fast $(CPPFLAGS) $< -o $@

hw1.x: $(HW1_C_OBJS) dcmt0.4/lib/libdcmt.a
    $LFLAGS$ (LDFLAGS) $(HW1_C_OBJS) -o $@ //not sure this is the same as it was as I tried playing around with it

dcmt0.4/lib/libdcmt.a: 
    make -C dcmt0.4/lib

black_scholes.o: black_scholes.c black_scholes.h gaussian.h random.h util.h

gaussian.o: gaussian.c gaussian.h util.h

main.o: main.c black_scholes.h parser.h random.h timer.h

parser.o: parser.c parser.h

random.o: random.c random.h

dcmt0.4/lib/random_seed.o: dcmt0.4/lib/random_seed.c

timer.o: timer.c timer.h

util.o: util.c util.h

clean:
    make -C dcmt0.4/lib clean
    rm -f $(HW1_C_OBJS) $(HW1_EXE)

Вот полный список ошибок

      /usr/bin/ld: /usr/lib64/crt1.o: in function `_start':
/home/abuild/rpmbuild/BUILD/glibc-2.26/csu/../sysdeps/x86_64/start.S:110: undefined reference to `main'
/usr/bin/ld: /tmp/pgccNQ8c1JiY3nDx.o: in function `black_scholes':
/home/sem/BlackScholesAcc/black_scholes.c:58: undefined reference to `init_gaussrand_state'
/usr/bin/ld: /home/sem/BlackScholesAcc/black_scholes.c:62: undefined reference to `spawn_prng_stream'
/usr/bin/ld: /home/sem/BlackScholesAcc/black_scholes.c:63: undefined reference to `uniform_random_double'
/usr/bin/ld: /home/sem/BlackScholesAcc/black_scholes.c:63: undefined reference to `gaussrand1'
/usr/bin/ld: /home/sem/BlackScholesAcc/black_scholes.c:77: undefined reference to `free_prng_stream'
/usr/bin/ld: /home/sem/BlackScholesAcc/black_scholes.c:77: undefined reference to `free_prng_stream'
make: *** [Makefile:13: black_scholes.o] Error 2

1 ответ

Когда я вижу ваш целевой hw1.x, мне кажется, что в рецепте отсутствует утилита компоновщика $(CC), которая связывает ваши объектные файлы. Не могли бы вы добавить ниже пример кода / справки и запустить.

      hw1.x: $(HW1_C_OBJS) dcmt0.4/lib/libdcmt.a
    $(CC) $LFLAGS$ (LDFLAGS) $(HW1_C_OBJS) -o $@
 

Пожалуйста, используйте ссылку ниже в качестве справки. Это должно помочь вам решить проблему и внести изменения в ваш make-файл: https://github.com/IBM/openacc-openmp-tutorial/blob/master/Makefile

Другие вопросы по тегам