Я хотел бы скомпилировать свою программу, но у меня есть некоторые проблемы для этого. Моя программа состоит из основной функции, написанной на C. Другие файлы - это файлы .h или .cpp, которые я не написал. У меня есть файл make, но, к сожалению, я не могу скомпилировать свою программу. Это «архитектура» файлов:Makefile для компиляции файлов c и cpp
a.h содержит только определения констант.
b.h и b.cpp. b.cpp включает a.h
c.h и d.cpp. c.h содержит сигнатуры методов d.cpp. d.cpp включает a.h, b.h и c.h.
Последний файл main.c, который включает c.h.
Makefile, который я использовал следующий:
CXX = g++
CXXFLAGS = -Wall -ansi -g
CC = gcc
CCFLAGS = -g
OBJS = main.o a.o b.o c.o
exec : $(OBJS)
$(CXX) -o [email protected] $(OBJS)
c.o: d.cpp b.h a.h
$(CXX) -c $(CXXFLAGS) $<
a.o: a.h
$(CXX) -c $(CXXFLAGS) $<
b.o: b.cpp a.h
$(CXX) -c $(CXXFLAGS) $<
%.o : %.cpp
$(CXX) -c $(CXXFLAGS) $<
%.o : %.c
$(CC) -c $(CCFLAGS) $<
Может кто-то мне, где я ошибаюсь? Кроме того, как я могу изменить make-файл таким образом, чтобы я мог помещать файлы a, b, c и d во вложенную папку, не вызывая никаких проблем?
Спасибо!
EDIT: Это ошибка, я получаю:
g++ -o tester main.o a.o b.o c.o
Undefined symbols for architecture x86_64:
"_crypto_aead_encrypt", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [tester] Error 1
Функция определена в объявленный в ч и определяется в d.cpp
Можете ли вы сказать, какая у вас ошибка? –
Вы уверены, что не можете компилировать, а не связывать? – MikeCAT
Да, ошибка происходит во время связи. Я добавил ошибку. – user1382272