2016-05-13 84 views
0

我需要在一個C++項目中包含dlib。我已經正確地鏈接了我的Makefile中的庫。這裏是Makefile:在C++項目中包括dlib庫的錯誤

EXE = face_frontalization 
OBJ_DIR = bin 

CFLAGS = -g -w 
# CXXFLAGS = -w -Wall -Wextra -g -std=c++0x 
# LDFLAGS = -lSDL2 -lSDL2_image -lSDL2_ttf -lSDL2_mixer -lSDL2_gfx -lm 

dummy_build_folder := $(shell mkdir -p $(OBJ_DIR)) 

# c++ source files of the project 
CXXFILES = $(shell find src -type f -name '*.cpp') 
CXXOBJ = $(patsubst src/%.cpp,bin/%.o,$(CXXFILES)) 

INCLUDE = -I/usr/include/dlib-18.18 
LIBS = `pkg-config --libs opencv` 
CXXFLAGS = `pkg-config --cflags opencv` -w -Wall -Wextra -g -std=c++0x 
LDFLAGS = -lcurl 
CFLAGS = `pkg-config --cflags opencv` -g -w 

MKDIR = mkdir -p 

ifdef V 
MUTE = 
VTAG = -v 
else 
MUTE = @ 
endif 

################################################################### 
# This is a Makefile progress indicator. 
# BUILD is initially undefined 

ifndef BUILD 

# max equals 256 x's 
sixteen := x x x x x x x x x x x x x x x x 
MAX := $(foreach x,$(sixteen),$(sixteen)) 

# T estimates how many targets we are building by replacing BUILD with 
# a special string 
T := $(shell $(MAKE) -nrRf $(firstword $(MAKEFILE_LIST)) $(MAKECMDGOALS) \ 
      BUILD="COUNTTHIS" | grep -c "COUNTTHIS") 

# N is the number of pending targets in base 1, well in fact, base x 
# :-) 
N := $(wordlist 1,$T,$(MAX)) 

# auto-decrementing counter that returns the number of pending targets 
# in base 10 
counter = $(words $N)$(eval N := $(wordlist 2,$(words $N),$N)) 

# BUILD is now defined to show the progress, this also avoids 
# redefining T in loop 
BUILD = @echo $(counter) of $(T) 
endif 
################################################################### 

# .PHONY: directories all 
# 
# directories: ${OUT_DIR} 
# ${OUT_DIR}: 
# ${MKDIR} ${OUT_DIR} 


all: $(EXE) 
    # build successful 


$(EXE): $(CXXOBJ) 
    $(CXX) $(CXXOBJ) -o $(EXE) $(LIBS) $(LDFLAGS) 

$(OBJ_DIR)/%.o: src/%.cpp 
    $(CXX) $(CXXFLAGS) $(INCLUDE) $< -c -o [email protected] 
    $(BUILD) 

$(OBJ_DIR)/%.o: src/%.c 
    $(CC) $(CFLAGS) $(INCLUDE) $< -c -o [email protected] 

run: all 
    ./$(EXE) 

clean: 
    # Cleaning... 
    -rm -f $(EXE) $(CXXOBJ) 
    rmdir bin/ 

我不知道爲什麼,但它給編譯錯誤。我也編譯了dlib庫本身,代碼示例正在運行。 我得到的錯誤是:

bin/fatialfeaturedetect.o: In function `fatial_feature_detector()': 
/home/playroom/Desktop/face-frontalization/src/fatialfeaturedetect.cpp:20: undefined reference to `dlib::base_window::wait_until_closed() const' 
/home/playroom/Desktop/face-frontalization/src/fatialfeaturedetect.cpp:18: undefined reference to `dlib::image_window::~image_window()' 
/home/playroom/Desktop/face-frontalization/src/fatialfeaturedetect.cpp:18: undefined reference to `dlib::image_window::~image_window()' 
bin/fatialfeaturedetect.o: In function `dlib::get_serialized_frontal_faces()': 
/usr/include/dlib-18.18/dlib/image_processing/frontal_face_detector.h:115: undefined reference to `dlib::base64::base64()' 
/usr/include/dlib-18.18/dlib/image_processing/frontal_face_detector.h:2358: undefined reference to `dlib::base64::decode(std::istream&, std::ostream&) const' 
/usr/include/dlib-18.18/dlib/image_processing/frontal_face_detector.h:2367: undefined reference to `dlib::base64::~base64()' 
/usr/include/dlib-18.18/dlib/image_processing/frontal_face_detector.h:2367: undefined reference to `dlib::base64::~base64()' 
bin/fatialfeaturedetect.o: In function `dlib_check_consistent_assert_usage': 
/usr/include/dlib-18.18/dlib/gui_widgets/../gui_core/../threads/threads_kernel_shared.h:44: undefined reference to `USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE_ASSERTS_preprocessor_directives_' 
bin/fatialfeaturedetect.o: In function `dlib::drawable_window::drawable_window(bool, bool)': 
/usr/include/dlib-18.18/dlib/gui_widgets/drawable.h:79: undefined reference to `dlib::base_window::base_window(bool, bool)' 
/usr/include/dlib-18.18/dlib/gui_widgets/drawable.h:79: undefined reference to `vtable for dlib::drawable_window' 
/usr/include/dlib-18.18/dlib/gui_widgets/drawable.h:79: undefined reference to `dlib::base_window::~base_window()' 
bin/fatialfeaturedetect.o: In function `dlib::drawable_window::~drawable_window()': 
/usr/include/dlib-18.18/dlib/gui_widgets/drawable.h:195: undefined reference to `vtable for dlib::drawable_window' 
/usr/include/dlib-18.18/dlib/gui_widgets/drawable.h:195: undefined reference to `dlib::base_window::close_window()' 
/usr/include/dlib-18.18/dlib/gui_widgets/drawable.h:195: undefined reference to `dlib::base_window::~base_window()' 
bin/fatialfeaturedetect.o: In function `dlib::scrollable_region_style_default::draw_scrollable_region_border(dlib::canvas const&, dlib::rectangle const&, bool) const': 
/usr/include/dlib-18.18/dlib/gui_widgets/style.h:527: undefined reference to `dlib::draw_sunken_rectangle(dlib::canvas const&, dlib::rectangle const&, unsigned char)' 
bin/fatialfeaturedetect.o: In function `dlib::image_display::disable_overlay_editing()': 
/usr/include/dlib-18.18/dlib/gui_widgets/widgets.h:3485: undefined reference to `dlib::base_window::invalidate_rectangle(dlib::rectangle const&)' 
bin/fatialfeaturedetect.o: In function `dlib::compress_stream_kernel_1<dlib::entropy_encoder_model_kernel_5<257ul, dlib::entropy_encoder_kernel_2, 200000ul, 4ul>, dlib::entropy_decoder_model_kernel_5<257ul, dlib::entropy_decoder_kernel_2, 200000ul, 4ul>, dlib::crc32>::decompress(std::istream&, std::ostream&) const': 
/usr/include/dlib-18.18/dlib/image_processing/../compress_stream/compress_stream_kernel_1.h:180: undefined reference to `dlib::entropy_decoder_kernel_2::entropy_decoder_kernel_2()' 
/usr/include/dlib-18.18/dlib/image_processing/../compress_stream/compress_stream_kernel_1.h:181: undefined reference to `dlib::entropy_decoder_kernel_2::set_stream(std::istream&)' 
/usr/include/dlib-18.18/dlib/image_processing/../compress_stream/compress_stream_kernel_1.h:196: undefined reference to `dlib::entropy_decoder_kernel_2::get_target(unsigned int)' 
/usr/include/dlib-18.18/dlib/image_processing/../compress_stream/compress_stream_kernel_1.h:201: undefined reference to `dlib::entropy_decoder_kernel_2::decode(unsigned int, unsigned int)' 
/usr/include/dlib-18.18/dlib/image_processing/../compress_stream/compress_stream_kernel_1.h:243: undefined reference to `dlib::entropy_decoder_kernel_2::~entropy_decoder_kernel_2()' 
/usr/include/dlib-18.18/dlib/image_processing/../compress_stream/compress_stream_kernel_1.h:243: undefined reference to `dlib::entropy_decoder_kernel_2::~entropy_decoder_kernel_2()' 
bin/fatialfeaturedetect.o: In function `void dlib::image_window::add_overlay<dlib::rgb_pixel>(std::vector<dlib::rectangle, std::allocator<dlib::rectangle> > const&, dlib::rgb_pixel)': 
/usr/include/dlib-18.18/dlib/gui_widgets/widgets.h:3968: undefined reference to `dlib::image_window::add_overlay(std::vector<dlib::image_display::overlay_rect, std::allocator<dlib::image_display::overlay_rect> > const&)' 
bin/fatialfeaturedetect.o: In function `dlib::image_window::image_window<dlib::array2d<dlib::rgb_pixel, dlib::memory_manager_stateless_kernel_1<char> > >(dlib::array2d<dlib::rgb_pixel, dlib::memory_manager_stateless_kernel_1<char> > const&)': 
/usr/include/dlib-18.18/dlib/gui_widgets/widgets.h:3883: undefined reference to `vtable for dlib::image_window' 
/usr/include/dlib-18.18/dlib/gui_widgets/widgets.h:3883: undefined reference to `dlib::image_display::image_display(dlib::drawable_window&)' 
/usr/include/dlib-18.18/dlib/gui_widgets/widgets.h:3885: undefined reference to `dlib::image_window::on_image_clicked(dlib::vector<long, 2l> const&, bool, unsigned long)' 
/usr/include/dlib-18.18/dlib/gui_widgets/widgets.h:3888: undefined reference to `dlib::base_window::show()' 
/usr/include/dlib-18.18/dlib/gui_widgets/widgets.h:3883: undefined reference to `dlib::image_display::~image_display()' 
bin/fatialfeaturedetect.o: In function `dlib::entropy_decoder_model_kernel_5<257ul, dlib::entropy_decoder_kernel_2, 200000ul, 4ul>::decode(unsigned long&)': 
/usr/include/dlib-18.18/dlib/image_processing/../entropy_decoder_model/entropy_decoder_model_kernel_5.h:422: undefined reference to `dlib::entropy_decoder_kernel_2::get_target(unsigned int)' 
/usr/include/dlib-18.18/dlib/image_processing/../entropy_decoder_model/entropy_decoder_model_kernel_5.h:456: undefined reference to `dlib::entropy_decoder_kernel_2::decode(unsigned int, unsigned int)' 
/usr/include/dlib-18.18/dlib/image_processing/../entropy_decoder_model/entropy_decoder_model_kernel_5.h:503: undefined reference to `dlib::entropy_decoder_kernel_2::decode(unsigned int, unsigned int)' 
/usr/include/dlib-18.18/dlib/image_processing/../entropy_decoder_model/entropy_decoder_model_kernel_5.h:551: undefined reference to `dlib::entropy_decoder_kernel_2::get_target(unsigned int)' 
/usr/include/dlib-18.18/dlib/image_processing/../entropy_decoder_model/entropy_decoder_model_kernel_5.h:553: undefined reference to `dlib::entropy_decoder_kernel_2::decode(unsigned int, unsigned int)' 
bin/fatialfeaturedetect.o: In function `void dlib::image_window::set_image<dlib::array2d<dlib::rgb_pixel, dlib::memory_manager_stateless_kernel_1<char> > >(dlib::array2d<dlib::rgb_pixel, dlib::memory_manager_stateless_kernel_1<char> > const&)': 
/usr/include/dlib-18.18/dlib/gui_widgets/widgets.h:3930: undefined reference to `dlib::image_display::get_image_display_rect() const' 
/usr/include/dlib-18.18/dlib/gui_widgets/widgets.h:3934: undefined reference to `dlib::base_window::set_size(int, int)' 
bin/fatialfeaturedetect.o: In function `void dlib::load_dng<dlib::array2d<dlib::rgb_pixel, dlib::memory_manager_stateless_kernel_1<char> > >(dlib::array2d<dlib::rgb_pixel, dlib::memory_manager_stateless_kernel_1<char> >&, std::istream&)': 
/usr/include/dlib-18.18/dlib/image_loader/image_loader.h:585: undefined reference to `dlib::entropy_decoder_kernel_2::entropy_decoder_kernel_2()' 
/usr/include/dlib-18.18/dlib/image_loader/image_loader.h:586: undefined reference to `dlib::entropy_decoder_kernel_2::set_stream(std::istream&)' 
/usr/include/dlib-18.18/dlib/image_loader/image_loader.h:757: undefined reference to `dlib::entropy_decoder_kernel_2::~entropy_decoder_kernel_2()' 
/usr/include/dlib-18.18/dlib/image_loader/image_loader.h:771: undefined reference to `dlib::entropy_decoder_kernel_2::entropy_decoder_kernel_2()' 
/usr/include/dlib-18.18/dlib/image_loader/image_loader.h:772: undefined reference to `dlib::entropy_decoder_kernel_2::set_stream(std::istream&)' 
/usr/include/dlib-18.18/dlib/image_loader/image_loader.h:771: undefined reference to `dlib::entropy_decoder_kernel_2::~entropy_decoder_kernel_2()' 
/usr/include/dlib-18.18/dlib/image_loader/image_loader.h:757: undefined reference to `dlib::entropy_decoder_kernel_2::~entropy_decoder_kernel_2()' 
/usr/include/dlib-18.18/dlib/image_loader/image_loader.h:771: undefined reference to `dlib::entropy_decoder_kernel_2::~entropy_decoder_kernel_2()' 
bin/fatialfeaturedetect.o: In function `void dlib::image_display::set_image<dlib::array2d<dlib::rgb_pixel, dlib::memory_manager_stateless_kernel_1<char> > >(dlib::array2d<dlib::rgb_pixel, dlib::memory_manager_stateless_kernel_1<char> > const&)': 
/usr/include/dlib-18.18/dlib/gui_widgets/widgets.h:3272: undefined reference to `dlib::scrollable_region::set_total_rect_size(unsigned long, unsigned long)' 
/usr/include/dlib-18.18/dlib/gui_widgets/widgets.h:3274: undefined reference to `dlib::scrollable_region::set_total_rect_size(unsigned long, unsigned long)' 
/usr/include/dlib-18.18/dlib/gui_widgets/widgets.h:3278: undefined reference to `dlib::base_window::invalidate_rectangle(dlib::rectangle const&)' 
/usr/include/dlib-18.18/dlib/gui_widgets/widgets.h:3283: undefined reference to `dlib::popup_menu_region::disable()' 
bin/fatialfeaturedetect.o: In function `dlib::entropy_decoder_model_kernel_5<256ul, dlib::entropy_decoder_kernel_2, 200000ul, 4ul>::decode(unsigned long&)': 
/usr/include/dlib-18.18/dlib/image_processing/../entropy_decoder_model/entropy_decoder_model_kernel_5.h:422: undefined reference to `dlib::entropy_decoder_kernel_2::get_target(unsigned int)' 
/usr/include/dlib-18.18/dlib/image_processing/../entropy_decoder_model/entropy_decoder_model_kernel_5.h:456: undefined reference to `dlib::entropy_decoder_kernel_2::decode(unsigned int, unsigned int)' 
/usr/include/dlib-18.18/dlib/image_processing/../entropy_decoder_model/entropy_decoder_model_kernel_5.h:503: undefined reference to `dlib::entropy_decoder_kernel_2::decode(unsigned int, unsigned int)' 
/usr/include/dlib-18.18/dlib/image_processing/../entropy_decoder_model/entropy_decoder_model_kernel_5.h:551: undefined reference to `dlib::entropy_decoder_kernel_2::get_target(unsigned int)' 
/usr/include/dlib-18.18/dlib/image_processing/../entropy_decoder_model/entropy_decoder_model_kernel_5.h:553: undefined reference to `dlib::entropy_decoder_kernel_2::decode(unsigned int, unsigned int)' 
bin/fatialfeaturedetect.o: In function `dlib::entropy_decoder_model_kernel_4<256ul, dlib::entropy_decoder_kernel_2, 200000ul, 4ul>::decode(unsigned long&)': 
/usr/include/dlib-18.18/dlib/image_processing/../entropy_decoder_model/entropy_decoder_model_kernel_4.h:348: undefined reference to `dlib::entropy_decoder_kernel_2::get_target(unsigned int)' 
/usr/include/dlib-18.18/dlib/image_processing/../entropy_decoder_model/entropy_decoder_model_kernel_4.h:376: undefined reference to `dlib::entropy_decoder_kernel_2::decode(unsigned int, unsigned int)' 
/usr/include/dlib-18.18/dlib/image_processing/../entropy_decoder_model/entropy_decoder_model_kernel_4.h:422: undefined reference to `dlib::entropy_decoder_kernel_2::decode(unsigned int, unsigned int)' 
/usr/include/dlib-18.18/dlib/image_processing/../entropy_decoder_model/entropy_decoder_model_kernel_4.h:469: undefined reference to `dlib::entropy_decoder_kernel_2::get_target(unsigned int)' 
/usr/include/dlib-18.18/dlib/image_processing/../entropy_decoder_model/entropy_decoder_model_kernel_4.h:471: undefined reference to `dlib::entropy_decoder_kernel_2::decode(unsigned int, unsigned int)' 
collect2: error: ld returned 1 exit status 
make: *** [face_frontalization] Error 1 

我不能找出我在圖書館鏈接到該項目已經完成。請幫忙。

+0

哪裏是聯動命令? – GMichael

+0

請在您的dlib庫和exe上運行'ldd -r'並確保沒有未定義的符號報告 – GMichael

+0

假設您的exe文件名爲'/my_exe'。您需要運行'ldd -r /my_exe'並查看沒有錯誤報告。如果您看到錯誤,則必須將缺少的庫添加到鏈接行和/或將缺少的路徑添加到LD_LIBRARY_PATH或其類似物。 – GMichael

回答

3

DLIB部分頭型和某些功能需要有libdlib.a鏈接到項目 有兩種方法如何解決你的問題:

  1. 鏈接DLIB:LDFLAGS = -ldlib(DLIB應安裝或如果在編譯與DLIB在此錯誤是存在其路徑提供給連接器)
  2. 加DLIB /所有/ source.cpp項目源列表(CXXFILES)
+0

在做第一件事時,它不能識別-ldlib。在第二點,錯誤是:src/source.cpp:7:41:致命錯誤:../base64/base64_kernel_1.cpp:沒有這樣的文件或目錄 #include「../base64/base64_kernel_1.cpp」 –

+1

你不應該複製source.cpp到你的項目中,而是給它的完全絕對路徑 – Evgeniy

+0

現在錯誤是:/ usr/bin/ld:/tmp/ccps6CPH.o:未定義引用符號'pthread_create @@ GLIBC_2.2.5' //lib/x86_64-linux-gnu/libpthread.so.0:錯誤添加符號:命令行中缺少DSO collect2:錯誤:ld返回1退出狀態 make:*** [face_frontalization]錯誤1 –

0

/usr/bin/ld: /tmp/ccps6CPH.o: undefined reference to symbol '[email protected]@GLIBC_2.2.5' 
//lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line 
collect2: error: ld returned 1 exit status make: *** [face_frontalization] Error 1 

X11丟失的可能性很大。我不知道這是什麼,如果有人這樣做,請告訴我。解決方法是將-lX11添加到LDFLAGS以便與其鏈接。如果你不想要它,你也可以指定編譯器選項-DDLIB_NO_GUI_SUPPORT。 (注意:我還沒有測試過它,不知道X11是怎麼做的,所以最好包括它,而不是排除它。)