2016-05-13 3 views
0

Мне нужно включить dlib в проект C++. Я правильно связал библиотеку в моем Makefile. Вот Makefile:Ошибка, включая библиотеку dlib в проекте C++

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

Пожалуйста, запустите 'ldd -r' в вашей библиотеке dlib и exe и убедитесь, что не указаны неопределенные символы – GMichael

+0

Предположим, что вы exe называются' /my_exe'. Вам нужно запустить 'ldd -r /my_exe' и увидеть, что ошибок не сообщается. Если вы видите ошибки, вам нужно добавить отсутствующие библиотеки в линию ссылок и/или отсутствующие пути (ы) к LD_LIBRARY_PATH или его аналогу. – GMichael

ответ

3

Dlib частично заголовок на основе и некоторые функции должны иметь libdlib.a связаны с проектом У вас есть два пути, как решить вашу проблему:

  1. ссылка dlib: LDFLAGS = -ldlib (dlib должен быть установлен или путь предоставляется линкера)
  2. добавить dlib/все/source.cpp в список источников проекта (CXXFILES)
+0

При выполнении 1-й вещи он не распознает -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: error: ld возвращен 1 статус выхода make: *** [face_frontalization] Ошибка 1 –

0

Если эта ошибка присутствует во время компиляции с dLib:

/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 делает это лучше, чем включить его исключить его.)

Смежные вопросы