【发布时间】:2020-05-19 13:14:36
【问题描述】:
我正在努力将一个项目链接到一个外部项目(名为 Prog)。 我不习惯大项目和依赖问题,这是我第一次遇到这样的问题链接另一个库。
我想将此库作为静态库或更好的库作为 MyProject 的动态库包含在内。 Prog 的编译为我提供了静态库(“.a”),我将它们包含在我的“基本”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++ static-linking dynamic-linking