ошибка: magic.h: нет такого файла или каталога (MacOS XV 10.6.8)

0

Я разрабатываю проект под названием " Duplicate File Finder ", где я также хочу извлечь информацию о типе файла, например png, zip, executable и т.д. Я узнал, что libmagic (magic.h) можно использовать для поиска файла. Но проблема, с которой я столкнулся довольно долго, заключается в том, что magic.h не распознается при компиляции модуля. Мой проект использует систему сборки "cmake". Я определил все параметры в CMakeLists.txt и даже не дал ошибку, когда я нахожу путь и библиотеку для магии, поскольку она установлена в моей системе. Я могу сделать "man libmagic", и он работает. Ниже приведен мой файл cmake. Ниже приведен мой файл CMakeLists.txt.

cmake_minimum_required(VERSION 2.8)
project( duplicateFinder )

set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON) 
set(Boost_USE_STATIC_RUNTIME OFF)
set(USE_OPENSSL TRUE)
find_package(Boost 1.53.0 COMPONENTS system filesystem regex thread REQUIRED)
find_package(OpenSSL)
FIND_PATH(SQLITE3_INCLUDE_DIR sqlite3.h)
find_library(SQLITE3_LIBRARY sqlite3)
FIND_PATH(MAGIC_INCLUDE_DIR magic.h)
find_library(MAGIC_LIBRARY magic $ENV{MAGIC_LIB_PATH})

if(NOT MAGIC_INCLUDE_DIR)
  message(SEND_ERROR "Failed to find magic.h")
endif()
if(NOT MAGIC_LIBRARY)
  message(SEND_ERROR "Failed to find the magic library")
endif()

if(NOT SQLITE3_INCLUDE_DIR)
  message(SEND_ERROR "Failed to find sqlite3.h")
endif()
if(NOT SQLITE3_LIBRARY)
  message(SEND_ERROR "Failed to find the sqlite3 library")
endif()

if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
    SET(duff_SOURCES src/run_duff.cpp src/sys_scan.cpp src/duff_utils.cpp)
    SET(duff_HEADERS src/run_duff.h src/sys_scan.h src/duff_utils.cpp)
    add_executable(bin/dup_finder ${duff_SOURCES} ${duff_HEADERS})
    add_definitions( -DBOOST_ALL_NO_LIB )
    add_definitions( -DBOOST_ALL_DYN_LINK )
    target_link_libraries(bin/dup_finder ${Boost_LIBRARIES} ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_REGEX_LIBRARY} ${Boost_THREAD_LIBRARY} ${OPENSSL_LIBRARIES} ${SQLITE3_LIBRARY} ${MAGIC_LIBRARY} )                                           
endif()

Я интенсивно проводил исследования в Интернете, но не смог решить проблему. Я надеюсь, что постановка проблемы понятна. Может ли кто-нибудь помочь мне в этом отношении. Заранее спасибо.

Теги:
linker
cmake
macos

1 ответ

1

Вы должны добавить

include_directories(${MAGIC_INCLUDE_DIR})

Дополнительные комментарии: Поскольку boost является REQUIRED, CMake не удастся, если он не найден, поэтому немного странно обернуть все внутри if(Boost_FOUND). Это вдвойне запутывает, так как вы связываете библиотеки, не поддерживающие его, в этом if...

Кроме того, вы должны добавить ${SQLITE3_INCLUDE_DIR} в include_directories, так как на другой машине они могут быть в том месте, которое еще не включено.

  • 0
    Спасибо большое, Саймон! Теперь это скомпилировано! : D а по поводу ваших комментариев вы абсолютно правы. Даже в какой-то момент я обнаружил, что это странно, но из-за волнения, связанного с программированием, я игнорировал это. Я постараюсь перестроить его в ближайшее время. Спасибо за ваши ценные комментарии. Если вы найдете время, не могли бы вы также взглянуть на мой проект и дать комментарии для улучшения в вопросах написания кода и проекта в целом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню