编译nw-node版本的插件

下载nwjs对应版本的nodejs

原始源码目录

yh@yh:~/addon$ tree
.
├── addon.cc
├── binding.gyp
├── CppLib
│   ├── mynumber.cpp
│   └── mynumber.h
├── myobject.cc
├── myobject.h
├── package.json
└── test.js 1 directory, 8 files

配置环境

#例如目标路径/home/yh/node/bin
export PATH=$HOME/node/bin:$PATH
#FQ前做好先下载好配置和编译时用的软件
#需要安装c++编译环境
#ubuntu20.04上需要安装python
sudo apt install g++ gcc make python patchelf tree

FQ然后开始配置编译环境

下载nw的插件编译工具

#一定要加-g
npm install -g nw-gyp

编译所使用的c++库

#编译c++库并将c++库移动到最上层
cd CppLib && g++ -shared -fPIC -o libmynumber.so mynumber.cpp && mv libmynumber.so .. && cd ..
#修改binding.gy文件中libraries的值为libmynumber.so的绝对路径

编译NW0.60.0版本的node插件

#需要FQ不然http://node-webkit.s3.amazonaws.com/v0.60.0/nw-headers-v0.60.0.tar.gz下不了
#最后显示ok则成功,not ok表示失败,0.60.0为nw-js的版本
nw-gyp configure --target=0.60.0
nw-gyp rebuild --target=0.60.0
#将编译好的插件移动到当前目录
mv build/Release/addon.node .

修改编译出的addon.node文件中所依赖的c++库 libmynumber.so的路径

patchelf --replace-needed $PWD/libmynumber.so libmynumber.so addon.node
patchelf --set-rpath "\$ORIGIN" addon.node

运行ldd检查插件的库依赖

ldd addon.node
#结果如下
linux-vdso.so.1 (0x00007fffac9c8000)
libmynumber.so => /home/yh/addon/./libmynumber.so (0x00007fbfd6623000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fbfd6432000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fbfd640f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbfd621d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fbfd60ce000)
/lib64/ld-linux-x86-64.so.2 (0x00007fbfd6633000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fbfd60b3000)

将addon.node、libnumber.so和test.js复制到nw的环境中测试

index.html

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<h1>Hello World!</h1>
<script src=test.js></script>
</body>
</html>

package.json

{
"name": "保密实力综合管理系统",
"version": "0.1",
"main": "index.html",
"chromium-args":"--mixed-context",
"webkit": {
"page-cache": false
},
"window": {
"show": true,
"toolbar": true,
"frame": true,
"position": "center",
"icon": "logo.png",
"width": 600,
"height": 400,
"min_width": 600,
"min_height": 400
},
"dependencies": {
"nw-gyp": "^3.6.6"
}
}

其他

用node测试addon.node模块

#在源代码目录删除或重命名build文件运行
#编译addon.node
npm install
#运行node
node ./test.js
#输出结果
11
12
13
21
22
23
7
3
10
2.5

编译nw-node版本的插件的更多相关文章

  1. 使用nvm管理node版本时,各个版本下公用npm安装的插件问题

    因为使用了NVM(node版本管理工具),所以在切换node版本的时候安装的插件不能共享使用,必须重新安装,导致不必要的工作量 所以我将npm(node包管理工具提取出来) 进行node版本之间的共享 ...

  2. 将less编译成css的gulp插件

    简介:gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快的编写代码, ...

  3. nvmw安装,用于控制node版本;

    之前一直使用的是node v2.2.0版本,挺说新版本的node解决了npm安装插件产生文件夹结构过深的问题,所以就想更新试试: 上网一看才发现,尼玛的node已经到了6.+版本了,好吧,看来还是得跟 ...

  4. Centos6.4编译安装Node.js(已验证)

    1.准备源文件包 [felix@MyTerminal Downloads]$ mv node-6.5.0 node [felix@MyTerminal Downloads]$ ls node node ...

  5. node c++多线程插件构想

    最近想写一个node的c++插件实现线程.提供的api使用回调并进行二次包装使其返回一个promise,并且要求需要在工作线程里执行的函数为async函数.如果是node7.0以下的版本,函数必须返回 ...

  6. 升级node版本

    一.升级方法: 1.产看node版本,没安装的请先安装: $ node -v 2.清楚node缓存: $ sudo npm cache clean -f 3.安装node版本管理工具'n'; $ su ...

  7. nvm(Node Version Manager)管理node版本

    nvm全称Node Version Manager是 Nodejs 版本管理器,它让我们能方便的对 Nodejs 的版 本进行切换. nvm 的官方版本只支持 Linux 和 Mac. Windows ...

  8. node版本的切换(转)

    大量开发者的贡献使Node版本的迭代速度很快,版本很多(横跨0.6到0.11),所以升级Node版本就成为了一个问题.目前有n和nvm这两个工具可以对Node进行无痛升级,本文简单介绍一下二者的使用. ...

  9. windows编译hadoop 2.x Hadoop-eclipse-plugin插件

    本文转载至:http://blog.csdn.net/congcong68/article/details/42098391 一.简介 Hadoop2.x之后没有Eclipse插件工具,我们就不能在E ...

  10. (1)Ngixn 编译安装 (版本:1.12.1)

        1.创建用户和群组     groupadd nginx     创建一个用户,不允许登陆和不创主目录     useradd -s /sbin/nologin -g nginx -M ngi ...

随机推荐

  1. ChatGPT 问答

    Win32GUI编程时,创建窗口触发消息的顺序 在Win32 GUI编程中,创建窗口并显示到屏幕上时,系统会触发一系列的消息,这些消息可以用来完成窗口的初始化和其他相关的工作.下面是创建窗口触发消息的 ...

  2. Spring Boot实现高质量的CRUD-3

    (续前文) 7.Service接口类 ​ ​ Service类提供业务的实现逻辑,其调用Dao类的方法进行数据存取,并为Controller类提供方法.类似于Dao的接口类,服务层使用接口类,便于代码 ...

  3. Min-25 筛学习笔记

    Min-25 筛学习笔记 \(\text{By DaiRuiChen007}\) 一.简要介绍 Min-25 筛,是一种能在亚线性时间内求出特定的一类积性函数 \(f(i)\) 的前缀和的算法. 具体 ...

  4. 02-面试必会-SSM框架篇

    01-什么是 Spring IOC 和 DI ? IOC : 控制翻转 , 它把传统上由程序代码直接操控的对象的调用权交给容 器,通过容器来实现对象组件的装配和管理.所谓的"控制反转&quo ...

  5. async-await Rust: 200 多行代码实现一个极简 runtime

    What I cannot create, I do not understand Rust 中的 runtime 到底是咋回事, 为了彻底搞懂它, 我在尽量不借助第三方 crate 的情况下实现了一 ...

  6. tensorflow神经网络归一化方法

    参考https://blog.csdn.net/chary8088/article/details/81542879

  7. Ubuntu 20.04使用 VNC远程桌面连接避坑指南

    Ubuntu 20.04使用 VNC远程桌面连接避坑指南 自从开始使用Ubuntu 20.04搭建深度学习服务器,就想到使用VNC远程桌面连接使用.可是之前一直使用的是Ubuntu18.04,心里想着 ...

  8. chrome事件循环的自问自答

    chrome事件循环的自问自答 目录 1. 宏任务有哪些? 2. 微任务有哪些? 3. dom渲染是事件循环的一部分么? 4. requestAnimationFrame的回调是宏任务还是微任务? 5 ...

  9. AttributeError: 'EmailUse' object has no attribute 'SendMail'

    错误原因:函数名与模块名重复 解决方案:不要将函数名与模块名重复

  10. win10安装mysql-8.0.19-winx64

    第一步:去官网下载安装 (重点)第二步:先解压,然后在mysql下创建一个my.ini文件,更改my.ini文件里面的两行安装目录,第二行加上\data,my.ini文件不能多或少一个符号,内容见文章 ...