本文基于wsl ubuntu 22.04.1 LTS 系统 上成功编译 安卓版 node js 14.15.4的一些记录.

编译环境:

nodejs 用到两套编译器分别用来编译本机的一些工具链和目标平台的node二进制

1.本机相关环境配置:

下载ndk android-ndk-r23b 解压到~/android-ndk-r23b

python 3.10

安装 gcc 9.40

# by default, build for arm64
HOST_OS="linux"
HOST_ARCH="x86_64"
HOST_GCC_DIR=/usr export CC_host=$HOST_GCC_DIR/bin/gcc
export CXX_host=$HOST_GCC_DIR/bin/g++
export AR_host=$HOST_GCC_DIR/bin/gcc-ar
export RANLIB_host=$HOST_GCC_DIR/bin/gcc-ranlib
export LD_LIBRARY_PATH=$HOST_GCC_DIR/lib64:$LD_LIBRARY_PATH GYP_DEFINES="target_arch=$ARCH"
GYP_DEFINES+=" v8_target_arch=$ARCH"
GYP_DEFINES+=" android_target_arch=$ARCH"
GYP_DEFINES+=" host_os=$HOST_OS OS=android"
export GYP_DEFINES

2.ndk编译配置

export NDK=~/android-ndk-r23b
export ENVSRCTARBALL=""
export HOST_GCC_DIR=""
export ENVDISTBIN="dist"
export ENVHOST=linux-x86_64
export ENVTARGET=aarch64-linux-android
export ENVANDROIDVER=23
export CROSS_COMPILE="--build=x86_64-linux --host=arm-eabi --target=arm-eabi" export COMPILERDIR="$NDK/toolchains/llvm/prebuilt/$ENVHOST/bin"
export CC="$COMPILERDIR/${ENVTARGET}${ENVANDROIDVER}-clang"
export CXX="$COMPILERDIR/${ENVTARGET}${ENVANDROIDVER}-clang++"
export LD="$COMPILERDIR/$ENVTARGET-ld"
export AS="$COMPILERDIR/$ENVTARGET-as"
export AR="$COMPILERDIR/llvm-ar"
export STRIP="$COMPILERDIR/llvm-strip"
export OBJCOPY="$COMPILERDIR/llvm-objcopy"
export OBJDUMP="$COMPILERDIR/llvm-objdump"
export RANLIB="$COMPILERDIR/llvm-ranlib"
export NM="$COMPILERDIR/llvm-nm"
export STRINGS="$COMPILERDIR/llvm-strings"
export READELF="$COMPILERDIR/llvm-readelf"
export ANDROID="$COMPILERDIR/../sysroot"

  

3.开始编译

./configure \
--prefix=~/node-v14.15.4 \
--dest-cpu=arm64 \
--dest-os=android \
--without-snapshot \
--openssl-no-asm \
--cross-compiling \
--shared

4.编译过程中的一些问题

全文搜索python脚本

grep -r 'from collections import Mapping'  ../node-v14.15.4/deps

grep -r 'from collections import Mapping'  ../node-v14.15.4/tools

把from collections import Mappin替换为from collections.abc import Mappin

原因是因为pyhton3.10版本高了

5.addon的编译

在同一台机器上安装原生版本的node-v14.14.4 和npm.

安装node-gyp,下面以官方例子为例:

#下载官方例子
git clone https://github.com/nodejs/node-addon-examples.git
#以helloword的为例
cd node-addon-examples/1_hello_world/napi
#修改binding.gyp ,在sources后面添加
# "libraries": [ "-lnode","-L.." ],
#并把libnode.so复制到这个目录下 #生成makefile
node-gyp configure --arch=$DEST_CPU --nodedir=~/node-v14.15.4
#编译
node-gyp build --silly

android 编译 node js 14的更多相关文章

  1. 在 Windows系统中编译node.js 源代码

    Node.js 在 Windows 下只能通过 Microsoft Visual Studio 编译,因此你需要首先安装 Visual Studio 或者免费的 Visual Studio Expre ...

  2. 在 Ubuntu 14.04/15.04 上配置 Node JS v4.0.0

    大家好,Node.JS 4.0 发布了,这个流行的服务器端 JS 平台合并了 Node.js 和 io.js 的代码,4.0 版就是这两个项目结合的产物——现在合并为一个代码库.这次最主要的变化是 N ...

  3. Node.js:进程、子进程与cluster多核处理模块

    1.process对象 process对象就是处理与进程相关信息的全局对象,不需要require引用,且是EventEmitter的实例. 获取进程信息 process对象提供了很多的API来获取当前 ...

  4. 编写Node.js原生扩展

    Node.js是一个强大的平台,理想状态下一切都都可以用javascript写成.然而,你可能还会用到许多遗留的库和系统,这样的话使用c++编写Node.JS扩展会是一个不错的注意. 以下所有例子的源 ...

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

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

  6. React++ node.js ++SQL Sever ++MySQL++ python ++ php ++ java ++ c++ c#++ java ++ android ++ ios ++Linux+

    "C语言在它诞生的那个年代,是非常不错的语言,可惜没有OOP.当项目臃肿到一定程度,人类就不可控了. 为了弥补这个缺陷,C++诞生了.而为了应对各种情况,C++设计的大而全,太多复杂的特性, ...

  7. Building and running Node.js for Android

    转自: http://www.goland.org/nodejsonandroid/ Building and running Node.js for Android October 14, 2014 ...

  8. [译]How to Install Node.js on Ubuntu 14.04 如何在ubuntu14.04上安装node.js

    原文链接为 http://www.hostingadvice.com/how-to/install-nodejs-ubuntu-14-04/ 由作者Jacob Nicholson 发表于October ...

  9. Linux 安装node.js ---- 源码编译的方式

    一 : 普通用户: 安装前准备环境: 1.检查Linux 版本 命令: cat /etc/redhat-release 2.检查 gcc.gcc-c++ 是否安装过 命令: rpm -q gcc rp ...

  10. shopnc编译安装IM服务器node.js

    编译安装IM服务器node.js下载地址http://www.nodejs.org/download/ 选择Source Code node-v0.12.0 #  ./configure # make ...

随机推荐

  1. liunx Ubuntu20.04怎么安装mysql

    转载csdn:优秀的处女座 https://blog.csdn.net/qq_42481794/article/details/113923803

  2. Layui 表单元素考到页面样式不生效

    表单元素必须要标记在表单里面(calss="layui-form") 例如: <div class="layui-form"> <input ...

  3. 解决Revit导出FBX模型材质丢失的问题

    初次使用Revit导出fbx格式模型,在导出模型后发现模型材质丢失了,上网查询之后也没到具体原因是什么,不过倒是找到了解决方式:在Revit中安装naviswork插件,然后从revit中导出nwc格 ...

  4. form表单enctype扩展

    enctype就是encodetype就是编码类型的意思. multipart/form-data是指表单数据有多部分构成,既有文本数据,又有文件等二进制数据的意思. 需要注意的是:默认情况下,enc ...

  5. 查询自增ID断点的地方

    方法一 SELECT id+1 AS ID FROM table WHERE id+1 not in (SELECT id FROM table);

  6. #加IPV6路由

    #加IPV6路由route -A inet6 add 2409:802f:6005:4204::31:0/123 gw 2409:805b:6005:4218::41f:1#路由写入网卡配置文件vi ...

  7. redis运维与管理

    redis内存存储,速度极快 丰富的附件功能 1.持久化功能:降存储在内存的数据保存到硬盘 2.发布与订阅:将消息同时分发给多个客户端 3.过期键功能:为键设置一个过期时间,让它在指定的时间之后自动被 ...

  8. 20192326杨沥凯 实验一《Linux基础与Java开发环境》实验报告

    20192326杨沥凯 2020-2021-1 <数据结构与面向对象程序设计>实验一报告 课程:<程序设计与数据结构> 班级: 1923 姓名: 杨沥凯 学号:20192326 ...

  9. 有监督的图像翻译——Pix2Pix

    应用:图像到图像的翻译是GAN的一个重要方向,基于一个输入图像得到输出图像的过程,图像和图像的映射,如标签到图像的生成,图像边缘到图像的生成过程. 图像处理.图形和视觉中的许多问题涉及到将输入图像转换 ...

  10. c++中int转string

    在muduo库中看见的一个函数,写的有点秀 const char digits[] = "9876543210123456789"; const char* zero = digi ...