node-ffi를 사용한 dll 연동 을 위한 node-ffi설치
electron에서 dll 연동을 위해 node-ffi를
사용할 예정
먼저 npm에서 node-ffi인 ffi를 설치 수행시 error 발생
$npm install -s ffi ...\node_modules\ref>if not defined npm_config_node_gyp (node "C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild ) else (node "" rebuild )
ffi를 사용하기 위해 node-gyp
+ window build tools
필요해서 발생
1.node-gyp를 global로 설치
$npm install -g node-gyp
2. window build tools
를 global로 설치
$npm install --g windows-build-tools //자동으로 python2.7 설치 Downloading BuildTools_Full.exe Downloading python-2.7.13.msi Starting installation...
6. ffi 설치시 설치 중 오류 발생
$npm install -s ffi ... if not defined npm_config_node_gyp (node "C:\Users\scanhand\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin\....\node_modules\node-gyp\bin\node-gyp.js" rebuild ) else (node "C:\Users\scanhand\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" rebuild ) ... Building assembly file ......\deps\libffi\src\x86\win64.asm Assembling: ......\deps\libffi\src\x86\win64.asm prep_cif.c types.c raw_api.c java_raw_api.c closures.c ffi.c win_delay_load_hook.cc ffi.vcxproj -> E:\work\DICOMViewer\electron\resources\app\JS\node_modules\ffi\build\Release \libffi.lib ffi.cc callback_info.cc threaded_callback_invokation.cc win32-dlfcn.cc win_delay_load_hook.cc ..\src\ffi.cc(111): error C2664: 'v8::Maybe v8::Object::ForceSet(v8::Localv8::Context ,v8::Localv8::Value,v8::Localv8::Value,v8::PropertyAttribute)': cannot convert argument 3 from 'v8::PropertyAttribute' to 'v8::Localv8::Value' [E:\work\DICOMViewer\electron\resourc es\app\JS\node_modules\ffi\build\ffi_bindings.vcxproj] ..\src\ffi.cc(111): note: No user-defined-conversion operator available that can perform th is conversion, or the operator cannot be called ...
node-ffi가 node v9.3.0
를 아직 지원하지 않아 발생 되는듯 함
node-ffi의 github(https://github.com/node-ffi/node-ffi) 에서 manual
install 시도
1.먼저 github에서 clone 후 npm 설치 수행
$npm install
2.node-gyp와 build tool은 이미 설치 한 상태 이기에 node-gyp rebuild수행
# 성공적으로 build 됨
$node-gyp rebuild
3. npm을 manual install 하기위해 npm형태로 package 수행
# 자동으로 package name과 version정보이름으로 .tgz형태로 저장 됨
$npm pack ffi-2.2.0.tgz
4.해당 package파일을 원하는 위치로 copy후 manual install 수행
$npm i -s ffi-2.2.0.tgz
5. 설치 완료
6. webpack 수행시 warning 발생
Warning : Critical ....
7. index.js source에 require(‘ffi’) 수행시 아직도 error발생
8. webpack으로 bundle 수행시 정상적으로 bundle이 되지 않아 error 발생
9. main page인 index.html page에 javascript source를 직접 삽입 시도
<script type="text/javascript> var ffi = require('./JS/node_modules/ffi'); </script>
10. npm start를 통해 electron 수행시 error 발생
Error: A dynamic link library (DLL) initialization routine failed.
11.modules를 electron-rebuild를 통해 다시 rebuild를 수행 하라고 한다.
먼저 electron-rebuild를 설치 후
npm install --save-dev electron-rebuild
12.electron-rebuild
수행. ffi module을 자동으로 rebuild수행 됨
./node_modules/.bin/electron-rebuild \ Building module: ffi, Completed: 0
13.다시 재 수행시 정상 실행 됨
중요) 결론적으로
1. Node를 8.X.X로 설치하고
2. node-gyp및 window build 설치 하고
3. node-ffi를 webpack으로 사용하지 않고
4. electron-rebuild를 통해 rebuild수행 하면 정상 작동