• 编译nw-node版本的插件


    编译nw-node版本的插件

    下载nwjs对应版本的nodejs

    debug版nwjs工具: https://dl.nwjs.io/v0.60.0/nwjs-sdk-v0.60.0-linux-x64.tar.gz
    release版nwjs工具: https://dl.nwjs.io/v0.60.0/nwjs-v0.60.0-linux-x64.tar.gz
    nwjs对应版本的nodejs: https://cdn.npmmirror.com/binaries/node/latest-v17.x/node-v17.3.0-linux-x64.tar.gz
    

    测试源码

    目录结构

    yh@yh:~/mymath$ tree
    .
    ├── addon.cc        //插件接口目录
    ├── binding.gyp     //编译配置文件
    ├── CppLib          //c++源码文件
    │   ├── mynumber.cpp
    │   └── mynumber.h
    ├── myobject.cc    //nodejs接口类
    ├── myobject.h
    ├── package.json   //项目配置文件
    └── test.js        //javascript接口测试文件
    
    1 directory, 8 files
    

    下载链接:https://github.com/GitHubYuanHao/NodeJSExtensions

    配置环境

    #例如目标路径$HOME/node/bin
    export PATH=$HOME/node/bin:$HOME/node/lib/node_modules/npm/bin/node-gyp-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/mymath.node .
    

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

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

    运行ldd检查插件的库依赖

    ldd mymath.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)
    
    

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

    在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"
      }
    }
    
    #运行nw(使用带SDK的环境)
    ./nw index.html
    #按F12打开网页控制台可以看到输出
    10 + 1 =  11
    11 + 1 =  12
    12 + 1 =  13
    20 + 1 =  21
    21 + 1 =  22
    22 + 1 =  23
    5 + 2 =  7
    5 - 2 =  3
    5 * 2 =  10
    5 / 2 =  2.5
    

    其他

    编译nodejs版本插件

    #首次编译需要下载第三方依赖,按照nosejs官方文档运行: npm install
    #会自动自动下载一些编译依赖
    node-gyp configure
    node-gyp rebuild
    

    用node测试addon.node模块

    #在源代码目录删除或重命名build文件运行
    #运行node
    node ./test.js
    #输出结果
    10 + 1 =  11
    11 + 1 =  12
    12 + 1 =  13
    20 + 1 =  21
    21 + 1 =  22
    22 + 1 =  23
    5 + 2 =  7
    5 - 2 =  3
    5 * 2 =  10
    5 / 2 =  2.5
    
  • 相关阅读:
    wps屏幕录制怎么用?分享使用方法!
    一、TestNG的基本使用
    [LeetCode周赛复盘] 第 299 场周赛20220626
    SpringBoot整合Swagger3.0
    [ vulhub漏洞复现篇 ] Apche log4j远程代码执行漏洞(CVE-2021-44228)
    探索LangChain Prompt模板:构建高效语言模型交互的秘诀
    三. 操作系统 (6分) [理解|计算]
    JLink 添加新设备用于下载/调试固件
    【算法题解】 Day1 前缀和
    你们分库分表使用什么中间件,有什么优点和缺点?
  • 原文地址:https://www.cnblogs.com/yuanhaoblog/p/17724684.html