编译nw-node版本的插件

打印 上一主题 下一主题

主题 847|帖子 847|积分 2541

编译nw-node版本的插件

下载nwjs对应版本的nodejs

原始源码目录
  1. yh@yh:~/addon$ tree
  2. .
  3. ├── addon.cc
  4. ├── binding.gyp
  5. ├── CppLib
  6. │   ├── mynumber.cpp
  7. │   └── mynumber.h
  8. ├── myobject.cc
  9. ├── myobject.h
  10. ├── package.json
  11. └── test.js
  12. 1 directory, 8 files
复制代码
配置环境
  1. #例如目标路径/home/yh/node/bin
  2. export PATH=$HOME/node/bin:$PATH
复制代码
  1. #FQ前做好先下载好配置和编译时用的软件
  2. #需要安装c++编译环境
  3. #ubuntu20.04上需要安装python
  4. sudo apt install g++ gcc make python patchelf tree
复制代码
FQ然后开始配置编译环境

下载nw的插件编译工具
  1. #一定要加-g
  2. npm install -g nw-gyp
复制代码
编译所使用的c++库
  1. #编译c++库并将c++库移动到最上层
  2. cd CppLib && g++ -shared -fPIC -o libmynumber.so mynumber.cpp && mv libmynumber.so .. && cd ..
  3. #修改binding.gy文件中libraries的值为libmynumber.so的绝对路径
复制代码
编译NW0.60.0版本的node插件
  1. #需要FQ不然http://node-webkit.s3.amazonaws.com/v0.60.0/nw-headers-v0.60.0.tar.gz下不了
  2. #最后显示ok则成功,not ok表示失败,0.60.0为nw-js的版本
  3. nw-gyp configure --target=0.60.0
  4. nw-gyp rebuild --target=0.60.0
  5. #将编译好的插件移动到当前目录
  6. mv build/Release/addon.node .
复制代码
修改编译出的addon.node文件中所依赖的c++库 libmynumber.so的路径
  1. patchelf --replace-needed $PWD/libmynumber.so libmynumber.so addon.node
  2. patchelf --set-rpath "\$ORIGIN" addon.node
复制代码
运行ldd检查插件的库依赖
  1. ldd addon.node
  2. #结果如下
  3.         linux-vdso.so.1 (0x00007fffac9c8000)
  4.         libmynumber.so => /home/yh/addon/./libmynumber.so (0x00007fbfd6623000)
  5.         libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fbfd6432000)
  6.         libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fbfd640f000)
  7.         libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbfd621d000)
  8.         libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fbfd60ce000)
  9.         /lib64/ld-linux-x86-64.so.2 (0x00007fbfd6633000)
  10.         libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fbfd60b3000)
复制代码
将addon.node、libnumber.so和test.js复制到nw的环境中测试

index.html
  1. <!DOCTYPE html>
  2. <html>
  3.   <head>
  4.     <title>Hello World!</title>
  5.   </head>
  6.   <body>
  7.     <h1>Hello World!</h1>
  8.    
  9.   </body>
  10. </html>
复制代码
package.json
  1. {
  2.     "name": "保密实力综合管理系统",
  3.     "version": "0.1",
  4.     "main": "index.html",
  5.     "chromium-args":"--mixed-context",
  6.     "webkit": {
  7.         "page-cache": false
  8.     },
  9.     "window": {
  10.         "show": true,
  11.         "toolbar": true,
  12.         "frame": true,
  13.         "position": "center",
  14.         "icon": "logo.png",
  15.         "width": 600,
  16.         "height": 400,
  17.         "min_width": 600,
  18.         "min_height": 400
  19.     },
  20.   "dependencies": {
  21.     "nw-gyp": "^3.6.6"
  22.   }
  23. }
复制代码
其他

用node测试addon.node模块
  1. #在源代码目录删除或重命名build文件运行
  2. #编译addon.node
  3. npm install
  4. #运行node
  5. node ./test.js
  6. #输出结果
  7. 11
  8. 12
  9. 13
  10. 21
  11. 22
  12. 23
  13. 7
  14. 3
  15. 10
  16. 2.5
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

魏晓东

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表