所以我有这个结构:
simpleConnect.cpp(包含main) 调用feature_extract.cpp
feature_extract.cpp(在这里做一些事情,返回simpleConnect)
ThesisHeader.h(声明了feature_extract和所有包含等...)
现在......这些文件使用名为ARIA的库(用于移动机器人)和一组头文件 - EIGEN(用于矩阵操作等)
我以前建议Aria的结构如下:
SOURCES=simpleConnect
all: $(SOURCES)
CFLAGS=-fPIC -g -Wall
ARIA_INCLUDE =-I/usr/local/Aria/include
ARIA_LINK=-L/usr/local/Aria/lib -lAria -lpthread -ldl -lrt
%: %.cpp
$(CXX) $(CFLAGS) $(ARIA_INCLUDE) $< -o $@ $(ARIA_LINK)
但是我在调用函数feature_extract:
的行中收到此错误对'feature_extract(......)'的未定义引用 collect2:ld重新出现1退出状态
据我所知,这与我没有告诉编译器feature_extract有...因为我不知道如何......
我尝试添加我在网上找到的作品,但无济于事,因此我来这里问。
是否有人能够修改makefile以便包含该文件以便能够编译?
感谢您的时间, 帕特里克
答案 0 :(得分:0)
CFLAGS=-fPIC -g -Wall
ARIA_INCLUDE =-I/usr/local/Aria/include
ARIA_LINK=-L/usr/local/Aria/lib -lAria -lpthread -ldl -lrt
app_name: simpleConnect.cpp feature_extract.cpp
$(CXX) $(CFLAGS) $(ARIA_INCLUDE) $^ -o $@ $(ARIA_LINK)
如果有效,可以进一步改进。
答案 1 :(得分:0)
感谢那些帮助过的人,我设法解决了这个问题。
我最后阅读了GNU make手册,它解决了我的问题。
https://www.gnu.org/software/make/manual/make.pdf
这是最终生效的最终makefile:
CFLAGS=-fPIC -g -Wall
ARIA_INCLUDE =-I/usr/local/Aria/include
ARIA_LINK=-L/usr/local/Aria/lib -lAria -lpthread -ldl -lrt
edit : simpleConnect.o feature_extract.o
$(CXX) $(CFLAGS) $(ARIA_INCLUDE) -o edit simpleConnect.o
feature_extract.o $(ARIA_LINK)
simpleConnect.o : simpleConnect.cpp ThesisHeader.h feature_extract.cpp
$(CXX) $(CFLAGS) $(ARIA_INCLUDE) -c simpleConnect.cpp $(ARIA_LINK)
feature_extract.o : feature_extract.cpp ThesisHeader.h
$(CXX) $(CFLAGS) $(ARIA_INCLUDE) -c feature_extract.cpp $(ARIA_LINK)
clean :
rm edit simpleConnect.o feature_extract.o