0

CImgライブラリを使用してnode.jsで画像を処理したいので、それを行うためのノードアドオンを作成します。コンパイルは成功しました。node-gypbuildcommondを実行しますが、問題ありません。

しかし、ノードプログラムを実行すると、次のエラーが発生します。

[root@localhost hcaptha]# node index.js 

module.js:485
  process.dlopen(filename, module.exports);
          ^
Error: /usr/local/nodejs/hcaptha/build/Release/hcaptha.node: undefined symbol: XSendEvent
    at Object.Module._extensions..node (module.js:485:11)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (/usr/local/nodejs/hcaptha/lib/hcap.js:1:75)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)

binding.gypファイルは次のとおりです。

{
  "targets":[
    {
      "target_name": "hcaptha",
      "sources": [ "addon/hcaptha.cc" ,"addon/cap.cc"],
      'cflags': ['-fexceptions','-O2','-Dcimg_use_png'],//the configure using CImg lib
      'cflags_cc': ['-fexceptions','-O2','-Dcimg_use_png']
    }
  ]
}

cap.ccコード:

#include <node.h>
#include <string>
#include <iostream>
#include "cap.h"
#include "CImg-1.5.3/CImg.h"

using namespace v8;
Handle<Value> cap::create(const Arguments& args) {//create an image
  HandleScope scope;
    using namespace cimg_library;
    CImg<unsigned char> captcha(256,64,1,3,0);//delete this line run ok!
  return scope.Close(Boolean::New(1));
}
cap::cap(){};
cap::~cap(){};

index.jsコード:

var obj = require('../build/Release/hcaptha.node');

誰かが私を助けることができますか?

4

1 に答える 1

2

私はついに結果を見つけました。行"libraries":['-lX11']をbinding.gypファイルに追加します。これで問題ありません。このような新しいbinding.gypファイル:

{
  "targets":[
    {
      "target_name": "hcaptha",
      "sources": [ "addon/hcaptha.cc" ,"addon/cap.cc"],
      "cflags": ['-fexceptions','-O2','-Dcimg_use_png'],
      "cflags_cc": ['-fexceptions','-O2','-Dcimg_use_png'],
      "libraries":['-lX11']
    }
  ]
}
于 2013-01-16T01:03:25.577 に答える