2012-05-13 10 views
0

この簡単なGraphicsMagickの例をノードバインディング/アドオンとして作成しようとしています。呼び出すときノードアドオン(OSX)のGraphicsMagickコードフリーズ

void AsyncWork(uv_work_t* req) { 
    std::cout << "AsyncWork..." << std::endl; 
    Baton* baton = static_cast<Baton*>(req->data); 
    baton->result = 12345; // Just a test 

    Magick::Image image; // <--- Freezes here! 
    image.read("snow.jpg"); 
    std::cout << "Scaling..." << std::endl; 
    image.scale("200"); 
    std::cout << "Done!" << std::endl; 
    image.write("snow-scaled.jpg"); 
    // and baton->error to true. 
} 

出力:このコードは期待通りにGraphicsMagickの1.3.15

#include <Magick++.h> 
#include <iostream> 
using namespace std; 

int main(int argc,char **argv) 
{ 
    Magick::InitializeMagick(0); 
    Magick::Image image; 

    try { 
    image.read("snow.jpg"); 
    image.scale("320"); 
    image.write("snow-scaled.jpg"); 
    } 
    catch(Magick::Exception &error_) { 
     cout << "Caught exception: " << error_.what() << endl; 
     return 1; 
    } 
    cout << "Image scaled!" << endl; 
    return 0; 
} 

Compiling: 
g++ scale.cpp `GraphicsMagick++-config --cppflags --cxxflags --ldflags --libs` 

Running: 
./a.out 
Image scaled! 

しかし、このコードは、ノード結合(0.6.14)を作るとOSX 10.6.7で動作するだけで(see full gist)をフリーズそれはjavascriptから:

AsyncWork... 

何か問題がありますか? サイドノートでは、これは実際にUbuntuでコンパイル/実行すると機能します!

答えて

1

Magick::InitializeMagick(0);で初期化しようとしましたか?AsyncWork?非同期関数はプールスレッド上で実行されます。

完成したGMアドオンhereはいつでもうまくいきます。

関連する問題