Я пытаюсь связать проект с внешним проектом (с именем Prog). Я не использую проблему с большими проектами и зависимостями, я впервые сталкиваюсь с такой проблемой при связывании другой библиотеки.
Я хочу включить эту библиотеку как stati c или лучше, как динамику c библиотека для MyProject. Компиляция Prog дает мне stati c библиотеки (".a"), я включил их в мой "basi c" Makefile, вот его изображение:
Makefile :
CXX = g++
SRCS = $(shell find . -name "*.cpp")
OBJS = $(addsuffix .o, $(basename $(SRCS))
EXEC = test
CXXFLAGS += -std=c++17 -O3
LIBS = -L/usr/include/lib -lprogvcore \
-lpthread -lz -lm
CXXFLAGS += -I/usr/local/include/code \
-std=c++11 -O3
all : $(EXEC)
$(EXEC): $(OBJS)
@$(CXX) -o $@ $^ $(CXXFLAGS) $(LIBS)
%.o: %.cpp
@$(CXX) -o $@ -c $< $(CXXFLAGS) $(LIBS)
.PHONY: clean mrproper
clean:
@rm -f $(OBJS)
mrproper: clean
@rm -rf $(EXEC)
Вот картинка иерархии проекта:
MyProject
|
|
|------ TESTMain.cpp
|
|------ TESTFILES_THAT_USE_PROG_FUNCTIONS
| |
| |------ MC
| | |
| | |------- PROG.cpp
| | |------- PROG.h
|
|------ PROG-Project
|
|------ Makefile
Когда я запускаю, компилятор распознает заголовки файлов PROG, но когда я хочу использовать функции PROG, он возвращает:
MC/PROG.o : In function « PROG::createModel(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) » :
/home/git/test/test-src/MC/PROG.cpp:37 : underfined reference to « PROGCore_init_data() »
/home/git/test/test-src/MC/PROG.cpp:41 : underfined reference to « PROGCore_init(PROGEnv_TAG*, void (* (*) [2])(PROGEnv_TAG*), int) »
collect2: error: ld returned 1 exit status
Makefile:46: recipe for target 'test' failed
make: *** [test] Error 1
Я пытался создать динамическую библиотеку c, чтобы избежать проблемы с упорядочением библиотек, но она не работала.
Извините, мой engli sh, но я надеюсь, что моя проблема была ясна.
Спасибо вы.