2016-08-10 46 views
0

我試圖讓我的C++項目中的dlib庫工作,不知道如何處理我的Makefile和#include < ...>在我的腳本的頭文件中。我把我的頭文件和我的腳本放在src目錄中。已經對dlib庫進行了符號鏈接,該鏈接位於include目錄中(請參閱下面的文件夾結構)。在C++項目中包含dlib

在DLIB網站,它說:

您應該DLIB文件夾本身不添加到您的編譯器的包括路徑

相反,你應該添加包含DLIB文件夾複製到文件夾中包含搜索路徑然後使用#include形式的include語句。這將確保一切構建正確。

我唯一想要的是將dlib包含在我的頭文件中,並將其編譯爲可以使用dlib的所有函數。你能幫助我嗎?

的文件夾結構是這樣的:

projectDir 
    |-Makefile 
    |-src 
    | |-main.cpp 
    | |-main.hpp 
    |-include 
     |-dlib (symbolic link) 
     |-all 
     | |-source.cpp 
     |- lots of header files 
     |-... 

的生成文件看起來是這樣的:

CC  := g++ # This is the main compiler 
    # CC := clang --analyze # and comment out the linker last line for sanity 
    SRCDIR := src 
    LIBDIR := lib 
    BUILDDIR:= build 
    TARGET := bin/main 

    SRCEXT := cpp 
    SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT)) 
    OBJECTS := $(patsubst$(SRCDIR)/%,$(BUILDDIR)              /%,$(SOURCES:.$(SRCEXT)=.o)) 
    CFLAGS := -g # -Wall 
    LIB  := $(shell find $(LIBDIR) -type f -name *.$(SRCEXT)) 
    INC  := 

    $(TARGET): $(OBJECTS) 
     @echo " Linking..." 
     $(CC) $^ -o $(TARGET) $(LIB) 

    $(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT) 
     @mkdir -p $(BUILDDIR) 
     $(CC) $(CFLAGS) $(INC) -c -o [email protected] $< 

    clean: 
     @echo " Cleaning..."; 
     $(RM) -r $(BUILDDIR) $(TARGET) 

    .PHONY: clean 

這是的main.cpp文件:

#include "main.hpp" 

    int main(){ 
     return 0; 
    } 

而頭文件:main.hpp,因爲我真的不知道該怎麼做。

回答

0

該文檔所說的是,您不能配置您的編譯器,以便它發現dlib默認包含,但在您的項目中執行。

這很有意義,所以當你分發你的makefile時,它可以在不改變編譯器配置的情況下適用於其他用戶。

對於你的問題,只是改變

INC  := 

通過

INC  := -Iinclude/dlib 

您可以使用您已經添加到您的項目一樣,DLIB標題:

#include <geometry.h> 

(不要添加路徑,它已經在編譯器搜索路徑中,由-I選項驅動)

有點超出了你的問題的範圍,但是如果你使用dlib庫中的函數(不僅僅是定義),你在鏈接階段會出現類似的問題(未定義符號稱爲dlib符號)。這條線可以幫助,但我認爲這是可疑太:

LIB  := $(shell find $(LIBDIR) -type f -name *.$(SRCEXT)) 

它會在LIB源文件(除非我錯了,SRCEXT不能包含庫擴展)

+0

我已經改變了INC線和評論LIB線。 #LIB \t \t:= $(殼找到$(LIBDIR)型的F -name * $(SRCEXT)。) INC \t \t:= -Iinclude/DLIB/ 此外,我增加了以下我的頭文件: #include <../ include/dlib/geometry.h> 我不知道你在連接階段的問題是什麼意思? (不用說:「沒有這樣的文件或目錄」) – user3346727

+0

檢查我的編輯,並告訴我結果。如果它編譯並且你有鏈接問題,請發佈。 –

+0

是的,非常感謝! Ther只是一個問題,我解決了。問題是包含了dlib文件夾。這是錯誤的(對於dlib至少)並給出錯誤。我現在所做的是: INC:= -Iinclude/dlib 和#include 。這現在起作用。非常感謝你! – user3346727