最近、プロジェクトに dlib ライブラリを追加しようとしています (クワッドコプターを制御したいので、MPC 部分に興味があります)、多くの異なるアプローチにもかかわらず、適切な作業ソリューションを見つけることができませんでした。次のようなメイクファイルがあります。
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:
等
2 番目のアプローチ: それから
ライブラリを作成する
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以上かかります。
3 番目のアプローチ
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 番目のアプローチは、最初のアプローチと同様の効果があります。
また、コンパイル アーティファクトが 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 $@
そして、これは機能しています!それでも、以前のメイクファイルではできません
誰でもこれで私を助けてください? (そして -Ldlib も機能していません)
環境: カスタム Lubuntu、gcc バージョン 4.7.2、GNU Make 3.81