0

所以我有这个结构:

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 reurned 1 exit status

据我所知,这与我没有告诉编译器 feature_extract 存在有关......因为我不知道如何......

我尝试添加我在网上找到的作品,但无济于事,因此我来这里问。

任何人都可以修改makefile以包含该文件以便能够编译吗?

谢谢你的时间,帕特里克

4

2 回答 2

0
  1. 这个应用程序需要 `feature_extract`。
  2. 您将“来源”用于来源以外的其他内容。
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)

如果这可行,则可以进行进一步的改进。

于 2013-03-29T01:16:20.520 回答
0

感谢帮助的人,我设法解决了这个问题。

我最终阅读了 GNU make 手册,它解决了我的问题。

https://www.gnu.org/software/make/manual/make.pdf

这是最终工作的最终生成文件:

    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
于 2013-03-29T12:44:33.830 回答