c++ - 错误 : magic. h : No such file or directory (MacOS X V 10. 6.8)

标签 c++ macos linker cmake

我正在开发一个名为“Duplicate File Finder”的项目,我还想在其中提取有关文件类型的信息,即 png、zip、可执行文件等。我发现 libmagic (magic.h) 可用于查找文件类型。但是我很长一段时间都面临的问题是 magic.h 在我编译模块时无法识别。我的项目使用“cmake”构建系统。我在 CMakeLists.txt 中定义了所有参数,甚至当我在系统中安装 magic 查找路径和库时它也没有给出错误。 我可以执行“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()

我在 Internet 上进行了深入研究,但无法解决问题。我希望问题陈述是可以理解的。任何人都可以在这方面帮助我。提前谢谢你。

最佳答案

你需要添加

include_directories(${MAGIC_INCLUDE_DIR})

补充说明:由于 boost 是REQUIRED,如果找不到它,CMake 将失败,所以将所有内容都包装在 if( Boost_FOUND)。 这更加令人困惑,因为您还链接了此 if 中的非增强库......

此外,您还应该将 ${SQLITE3_INCLUDE_DIR} 添加到 include_directories 中,因为在另一台机器上,它们可能位于尚未包含的位置。

关于c++ - 错误 : magic. h : No such file or directory (MacOS X V 10. 6.8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19287086/

相关文章:

c++ - 静态 vector 成员变量

c++ - 如何在类周围共享参数 - C++

包装器的 C++ 链接器问题

c++ - 与 BLAS OS X 链接

macos - 如何在 Mac 上使用尖括号将 C 库安装为 <mylib.h>

C++ - cout 将两个整数的商打印为零

c++ - 读写缓冲区问题

swift - Xcode/swift : How to add extra argument to a bash execution

c - OS X 上的 aio_read from file 错误

java - 运行 Hadoop 示例 Jar