2016-09-07 16 views
-1

私はCでプログラミングしています。ImageMagickライブラリを使用したいが解決できないものがあります。CMakeでImageMagick libのImageWandコンポーネントを使用

これは私のcMakeList.txtファイルです:

cmake_minimum_required(VERSION 3.3) 
project(WebServer) 

set(CMAKE_C_COMPILER "/usr/bin/gcc") 

set(SOURCE_FILES io.c server.c lock_fcntl.c sig_handler.c thread_job.c msg_parser.c) 
set(LIB http-parser-master/http_parser.c) 

set(CMAKE_USE_PTHREADS_INIT true) 
set(CMAKE_USE_PTHREADS_INIT ON) 

find_package(Threads REQUIRED) 
find_package(ImageMagick COMPONENTS ImageWand) 

include_directories(header) 
include_directories(http-parser-master) 

#include_directories(/usr/local/include/ImageMagick-7/MagickWand) 
include_directories(${ImageMagick_INCLUDE_DIRS}) 

add_executable(server ${SOURCE_FILES} ${LIB}) 
add_executable(client client.c io.c) 
add_executable(main main.c io.c) 

target_link_libraries(main ${ImageMagick_LIBRARIES}) 
target_link_libraries(server Threads::Threads) 

、これはソースmain.cのである:

#include <ImageMagick-7/MagickWand/MagickWand.h> 
#include "basic.h" 

void convert_image(char *path, float quality_factor, char *out) { 

    int width, height; 
    MagickWand *n_wand = NULL; 

    MagickWandGenesis(); 

    m_wand = (struct MagickWand *) NewMagickWand(); 


    MagickReadImage(m_wand,"logo:"); 

    width = MagickGetImageWidth(m_wand); 
    height = MagickGetImageHeight(m_wand); 

    if((width /= 2) < 1)width = 1; 
    if((height /= 2) < 1)height = 1; 

    MagickResizeImage(m_wand,width,height,LanczosFilter,1); 

    MagickSetImageCompressionQuality(m_wand,95); 

    MagickWriteImage(m_wand,"logo_resize.jpg"); 

    if(m_wand)m_wand = (struct MagickWand *) DestroyMagickWand(m_wand); 

    MagickWandTerminus(); 
} 

のみMagickWandGenesis()MagickWandTerminus()が解決されています。 ライブラリのインストールが正しく終了します。の解き方?

編集:

が、私はエラーを取得する実行:

/usr/local/include/ImageMagick-7/MagickWand/MagickWand.h:29:40: fatal  error: MagickCore/magick-config.h: File o directory non esistente 
# include "MagickCore/magick-config.h" 
            ^
compilation terminated. 
make[3]: *** [CMakeFiles/main.dir/main.c.o] Errore 1 
make[2]: *** [CMakeFiles/main.dir/all] Errore 2 
make[1]: *** [CMakeFiles/main.dir/rule] Errore 2 
make: *** [main] Errore 2 

私はここに示されている解決策を試してみましたが、動作しません: ImageMagick No such file or directory

+0

もっと具体的に言えば、コンパイラはこれらの関数への未定義の参照があることを伝えますか? –

+0

申し訳ありません、私は編集しました –

+0

'ImageMagick-7'は' $ {ImageMagick_INCLUDE_DIRS} 'から離れている必要がありますので、主なソースには' #include 'のみが必要です。 – emcconville

答えて

1

ライブラリ構造は、その次のとおりです。

ImageMagick-7 
    ├── MagickCore 
    │   ├── magick-config.h 
    | 
    └── MagickWand 
     ├── MagickWand.h 

MagickWand.hが含まれます。 MagickCoreのヘッダー include_directories(${ImageMagick_INCLUDE_DIRS})include_directories(/usr/local/include/ImageMagick-7)に置き換えて修正しました。 なぜか分かりませんが、もし私が${ImageMagick_INCLUDE_DIRS}を印刷すると、これは設定されていません。

関連する問題