나는 Windows 8.1 32bit에서 VS2015 컴파일러와 node-gyp를 사용하여 Node 용 네이티브 모듈을 작성하기로 결정했다. 나는 this page의 지시에 따라 일했다. 내 문제에 대한 해결책을 찾아 인터넷 (StackOverflow 포함)을 검색했습니다.노드 모듈을 성공적으로 컴파일하고 "모듈이 자체 등록하지 않았습니다."
나는 다음 버전을 사용 :
- 노드 : 4.6.0
- 노드 사기꾼 : 3.4.0
모듈의 소스 코드 :
// main.c++
#include <node.h>
#include <v8.h>
void Method(const v8::FunctionCallbackInfo<v8::Value>& args) {
v8::Isolate* isolate = args.GetIsolate();
v8::HandleScope scope(isolate);
args.GetReturnValue().Set(v8::String::NewFromUtf8(isolate, "world"));
}
void init(v8::Local<v8::Object> target) {
NODE_SET_METHOD(target, "hello", Method);
}
NODE_MODULE(sapphire, init);
// binding.gyp
{
"targets": [
{
"target_name": "sapphire",
"sources": [ "main.c++" ]
}
]
}
Ev ery 시간 컴파일 (내부 애드온의 소스 코드 폴더라고하는 node-gyp rebuild
)이 성공합니다. 컴파일하기 전에 [email protected] | win32 | ia32
에 대해 컴파일되는 Node-Gyps 인쇄물. 그 시점까지 모든 것이 좋았습니다.
테스트를 위해 가장 간단한 스크립트를 작성했습니다.
// test.js
try {
var sapphire = require('/build/Release/sapphire');
console.log(sapphire.hello());
} catch(err) {
console.log(err);
}
결과는 오류 Error: Module did not self-register.
을 인쇄 하였다. 나는 노드와 V8을 NAN (다음)으로 대체하려고 시도했다. 그러나 결과는 동일했습니다. (인터프리터에 비해 라이브러리)
- 잘못된 버전 : 내 문제에 대한 해결책에 대한 검색 동안 나는 두 가지 가능성에 걸쳐왔다. 불행히도이 가능성을 제거한 Node-Gyp은 내가 사용하는 인터프리터와 동일한 라이브러리 버전을 사용합니다.
- node_modules에서 모듈을 다시 다운로드하십시오. 나는 정직하게 이유를 이해하지 못한다. Node-Gyp 설치 중에 필요한 모든 모듈이 업데이트되었으므로 나머지는 중요하지 않습니다.
이 오류의 원인은 무엇입니까? 모듈의 소스 코드는 노드 (v4.6.0)의 설명서에서 자습서에서 다운로드되었습니다. 나는 또한 작은 변화를 만들고 NAN을 포함한 모든 비공식 가이드를 사용하려고 노력했다. 문제가 같을 때마다.
'.C++'는 C++ 소스 파일의 공통 파일 확장자가 아닙니다. 나는 파일 확장자를 '.cc'와 같은 것으로 바꾸는 것이 파일 확장자와 다른 것들을 기반으로 다른 컴파일러 (C vs C++)를 선택하는 것을 보았 기 때문에 대신 도움이 될지 궁금합니다. – mscdex
@mscdex 나는 그것을 믿을 수 없다. 네가 옳아! 나는 그 연장이 아무 것도 바뀌지 않는다고 확신했다. 이제 완벽하게 작동합니다! 가능한 경우 대답으로 다시 작성하십시오. – Maxie