Как я могу заставить 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