【问题标题】:How to compile dlib under make with multiple files?如何在make下用多个文件编译dlib?
【发布时间】:2016-09-26 17:23:08
【问题描述】:

最近我一直在尝试将 dlib 库添加到我的项目中(我对 MPC 部分很感兴趣,因为我希望它能够控制四轴飞行器),尽管有许多不同的方法,但我找不到合适的工作解决方案。 我有一个这样的makefile:

all : quadro_mini
CXXFLAGS = -std=c++11 -lpthread -O3 #-Wall -pedantic
LIBRARIES = -IMPU6050 -LMPU6050 -IHCSR04 -LHCSR04

OBJS = Steer.o Measurer.o LogWriter.o Server.o Functions.o Engine.o EnginesManager.o main.o 
HDRS = Server.h Measurer.h LogWriter.h Functions.h SteeringSignalsListener.h Engine.h EnginesManager.h Constants.h Steer.h 

$(OBJS) : $(HDRS) 

quadro_mini : $(OBJS)
    g++ -pthread $^ $(LIBRARIES) -lMPU6050 -lHCSR04 -DLIB_NO_GUI_SUPPORT -o $@

我想在 Steer.o 模块中使用 dlib

第一种方法
链接到包含所有必要包含的标题

OBJS = Measurer.o LogWriter.o Server.o Functions.o Engine.o EnginesManager.o main.o dlib/control.o #nazwy sie musza zgadzac z nazwami *.cpp i *.h
HDRS = Server.h Measurer.h LogWriter.h Functions.h SteeringSignalsListener.h Engine.h EnginesManager.h Constants.h Steer.h 

$(OBJS) : $(HDRS) 

Steer.o : $(HDRS)
   g++ $(CXXFLAGS) $^ $(LIBRARIES) -I. dlib/control.h -o $@
quadro_mini : $(OBJS) Steer.o
    g++ -pthread $^ $(LIBRARIES) -lMPU6050 -lHCSR04 -DLIB_NO_GUI_SUPPORT -o $@

我收到的输出:

In file included from dlib/control/../matrix/matrix_exp.h:6:0,
             from dlib/control/../matrix/matrix.h:6,
             from dlib/control/../matrix.h:6,
             from dlib/control/approximate_linear_models.h:7,
             from dlib/control/lspi.h:7,
             from dlib/control.h:6,
             from Steer.h:10:
dlib/control/../matrix/../algs.h:146:9: error: expected identifier before numeric constant
dlib/control/../matrix/../algs.h:146:9: error: expected '}' before numeric constant
dlib/control/../matrix/../algs.h:146:9: error: expected unqualified-id before numeric constant
dlib/control/../matrix/../algs.h:495:14: error: expected nested-name-specifier before 'disable_if_c'
dlib/control/../matrix/../algs.h:495:26: error: expected initializer before '<' token
dlib/control/../matrix/../algs.h:510:14: error: expected nested-name-specifier before 'enable_if_c'
dlib/control/../matrix/../algs.h:510:25: error: expected initializer before '<' token
dlib/control/../matrix/../algs.h:627:48: error: 'uint64' was not declared in this scope
dlib/control/../matrix/../algs.h:627:48: note: suggested alternative:

等等

第二种方法:
用它制作图书馆

all: dlib.a

CXXFLAGS = -Wall -g -std=c++11 -pthread -DLIB_NO_GUI_SUPPORT

dlib.o : control.h
    g++ $(CXXFLAGS) -c $^ -o $@ 

dlib.a: dlib.o
    ar -rv $@ $^

但既然一切都是 dlib 中的标头,那么我应该包含什么标头?无...因为官方页面禁止将其添加到编译器的包含路径中。那么这种方法仍然行不通......仅供参考 - 编译工件需要超过 60 mb。

第三种方法
添加包含 dlib 文件夹的文件夹以包含搜索路径,然后使用 #include 形式的包含语句(dlib 官方声明)。

CPLUS_INCLUDE_PATH=/home/linaro/Quadrocopter/dlib
export CPLUS_INCLUDE_PATH

还有

CPLUS_INCLUDE_PATH=/home/linaro/Quadrocopter/
export CPLUS_INCLUDE_PATH

先给出:

/home/linaro/Quadrocopter/dlib/dlib_include_path_tutorial.txt:1:2: error: #error "Don't put the dlib folder in your include path"


第二种方法与第一种方法的效果相似

我还创建了只有 2 个编译工件的测试版本:

all : test
CXXFLAGS = -g -O3 -std=c++11
LFLAGS = -lpthread -lnsl 

OBJS = maintest.o LogWriter.o
HDRS = LogWriter.h Constants.h

$(OBJS) : $(HDRS)

test : $(OBJS) 
    g++ -pthread -Idlib/control.h $^ -o $@

这是有效的!但它不能与我以前的 makefile 一起使用

有人请帮我解决这个问题吗? (并且没有 -Ldlib 也不起作用)

环境:自定义 Lubuntu,gcc 版本 4.7.2,GNU Make 3.81

【问题讨论】:

    标签: c++ makefile dlib


    【解决方案1】:

    让我们逐步进行。试试这个,告诉我们结果:

    HDRS = Server.h Measurer.h LogWriter.h Functions.h SteeringSignalsListener.h Engine.h EnginesManager.h Constants.h Steer.h
    
    Measurer.o : Measurer.cpp $(HDRS) 
        g++ $(CXXFLAGS) $< -I. -o $@
    

    【讨论】:

    • 在我添加后: Steer.o : Steer.cpp $(HDRS) g++ $(CXXFLAGS) $
    • @lagoru:这很有趣。现在试试我的建议。并且不要添加。尝试包含我上面写的内容的 makefile,仅此而已。
    • 经过两周的努力,我终于找到了解决方案 - 它根本与链接无关。在我最后一次看似毫无意义的寻找解决方案的尝试中。我已经在临时系统上复制了所有内容,并更新了 gcc。在我正常链接它并开始构建后,它向我显示 dlib "TIMEOUT" 的全局变量与我的全局#define TIMEOUT 冲突......,Lubuntu 上的 gcc 只是显示垃圾与问题无关(几千行与案例错误无关)。尽管如此,还是谢谢你,因为你是唯一感兴趣的人;)
    猜你喜欢
    • 1970-01-01
    • 2011-02-05
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 2018-09-18
    相关资源
    最近更新 更多