Я работаю над довольно большим Makefile из репозитория tensorflow, и мне нужно добавить ссылку на файл.
После некоторой отладки ошибки ссылки я обнаружил, что если мой файл заканчивается на .cc, то ошибка ссылки исчезает, тогда как при ссылке на файл .c появляется ошибка (содержимое файла остается прежним).
Я связываю файл в файле Makefile.inc:
.
.
.
FL_SRCS := \
tensorflow/lite/vis_mi/main.cc \
myFunctions.c \ -->>>>IF I CHANGE THE FILENAME TO myFunctions.cc and link to this .cc file here, it works!!
.
.
.
# Builds a standalone binary.
$(eval $(call vis_test,vis_mi,\
$(FL_SRCS),$(FL_HDRS)))
Ошибка ссылки при использовании окончания .c заканчивается:
tensorflow/lite/vis_mi/main.o: In function `main':
tensorflow/lite/vis_mi/main.cc:183: undefined reference to `printMsg()'
../downloads/gcc_embedded/bin/../lib/gcc/arm-none-eabi/7.3.1/../../../../arm-none-eabi/bin/ld: link errors found, deleting executable `tensorflow/lite/vis_mi'
collect2: error: ld returned 1 exit status
gmake: *** [tensorflow/lite/vis_mi/Makefile.inc:578: tensorflow/lite/vis_mi/bin/micro_speech] Error 1
Код файла .c:
#include <stdio.h>
#include "myFunctions.h"
void printMsg(){
//do something here
}
И заголовочный файл:
#ifndef MYFUNCTIONS_H
#define MYFUNCTIONS_H
void printMsg();
#endif /* MYFUNCTIONS_H */
Как я могу включить файл, оканчивающийся на .c? Makefiles для меня довольно новы, и я не хотел включать все детали, и если вам нужны какие-либо дополнительные сведения из Makefile, чтобы ответить на этот вопрос, я буду рад отредактировать свой пост.
.c
, так как это только запутает всех. - person kaylum   schedule 10.12.2019%.o: %.cc $(CXX) -xc++ -c $< -o $@
. Но нет для файлов c. - person hko   schedule 10.12.2019eval
иcall
. Почему бы просто не написать простое правило и заставить его работать? Мы ничем не можем помочь, так как все важные части make-файла скрыты за этими расширенными функциями. - person MadScientist   schedule 10.12.2019C++
(main.cc), а другой какC
(myFunctions.c). Это не будет работать без изменений кода. Если весь код действительно написан на C, изменитеmain.cc
наmain.c
. - person kaylum   schedule 10.12.2019.c
, вам, вероятно, придется узнать оextern "C"
в C++ и о том, как его использовать при вызове кода C. - person Jonathan Leffler   schedule 10.12.2019