7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NodeJS-Android完璧なビルド方法&ビルド済Docker Image

Last updated at Posted at 2016-09-08

from https://github.com/sjitech/build-nodejs-for-android-perfectly

NDKのstandalone toolchainでNodeJSをcross-compileする時に、一発成功した人はないでしょう。--without-...を指定したり、環境変数、GYPをいじったりしないと通らないですね。

いいニューズは、完璧にNodeJS for android-{arm,arm64,x86,x64,mipsel}をビルドする方法がありました。皆んなone lineコマンドです。ソース修正なし、機能制限なし!

しかも、ビルド済みのバイナリファイルもアップロードしました:https://github.com/sjitech/nodejs-android-prebuilt-binaries。

自分でdocker image osexp2000/build-nodejs-androidを利用すれば、ビルド結果は見れるし、自分でソースを修正してコンパイルも素早くできる、そんなビルド環境dockerです。

詳しくは上記のURLを参照ください。


私はNDKのstandalone toolchainを便利に利用するために、android-gcc-toolchainを作る時に、テストとして、NodeJSのAndroid版をビルドしてみました。

前回のNodeJS Androidをビルドしてから2年前を経過した、もう大分改善された、すんなりビルド完了でしょうと思ったが、意外に、あれこれに怒られた。

一体どこで弾かれたのか、覗いて見たが、色々問題ですね、ほとんどはhost(現在利用中のマシン)側向けのコードを作成する時のエラーです。例えば、

  1. [Mac]ar(.oを.aに合併するツール)の乱用。Android側向けの.oファイルをhost側の.oとして利用してしまった。
  2. [Mac]-lrt: 存在しないlibrtへリンクしようとしている。Macはlibrtはない。
  3. [Linux]-lpthread: どこかでlibpthreadをリンクするように指定し忘れたようです、変な"DSO command not found"エラーが出た。
  4. [Mac/Linux]-m32: 32bitコードを作成するような指示-m32は一部指定、一部指定し忘れ、結局32bitと64bit混在でリンクエラーになった。

いずれも、一体NodeJS及び子プロジェクトのどこで設定間違ったのか、いちいち探すのは大変です。
GYP,CMake,autoconfいくつかビルドシステム混在しているようです、関節が多すぎ全部把握するのは難しい。

偶然に、思い出したアイデアは$PATH経由ar,gccなどコマンドのhookです。そこでオプションの増減をすれば、きっとうまく行く!試してみた、うまくできた。

こうして、色々整理して、android-gcc-toolchainツールを出来上がりました。
NDKのstandalone toolchainを自由に切り替え、素早く利用できるツールです。

今日はとりあえずここまで。

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?