さっき決めたブログ

[Nim]IntelliJ IDEA+NimでAndroidアプリを作成したかったが、いまいちだった件

2020年10月5日 6:40 PM01.91KNimPROGRAMNimgccAndroidIntelliJ_IDEAndk

コンパイルエラー

これでビルドが通ると思ったのですが、IDEAから再度ビルドをかけると次の様なエラーが出てしまいます。

ビルドエラー
error: 'Nim_and_C_compiler_disagree_on_target_architecture' declared as an array with a negative size

ネットでエラー内容をググると、どうやらnimは32ビット用のCソースを出力しているが、C側のコンパイルオプションが64ビットになっている(もしくはその逆)の場合に発生するようです。

ならばと、gradleのコンパイルオプションを変更します。

41行目のコンパイルオプションを --cpu:arm から --cpu:arm に変更しています。 これで再度ビルドを行うと。。。
・・・またもや同じエラーが吐かれます!!!

なんでや〜💢💢💢

・・・結局分かったのはAndroidのNDKコンパイルは、ARMの32,64ビット用と、Intelの32,64ようの計4回コンパイルをおこなってるみたい。
なんでNim側で32ビット用にトランスパイアすれば64ビット用のコンパイルでおちるし、64ビット用にトランスパイアすれば32ビット用のコンパイルでおちるということか。

詰んだじゃん、これ。

Nim側でも32,64ビット両方トランスパイアしてやって、Cのコンパイルで適した方を参照するように振分けてやればいいのかもしれないが、そんな事出来るのだろうか?? いやそれに、ARMとIntelも分けなくて良いのか?エンディアン問題とか大丈夫なのか??

一応、動いたけど。。。

もうすこしだけCのソースを追ってエラーの箇所を調べてみたのですが、[Nimをインストールしたフォルダ]\lib\nimbase.h でエラーになっていました。

522行目でエラーになっています。
どうも、ここの行は先に話したNim側とC側でプロセッサのビット数が合っているかチェックしている部分らしく、動作に影響が出るものではなさそう。。。
nimbase.h はNimのシステムファイルなので基本(絶対)修正不可なものではあるのですが、ちょっと試しにこの行をコメントアウトしてみます。

これでビルドを行うと

ビルド結果

通ったああああぁぁぁぁ~~~~🤣🤣🤣
(何かワーニング出てるけどもういいや)

実行結果

そして、Noxでも表示されたああああああぁぁぁ~~~~🤣🤣🤣

本当はUI周りとかをNimからいじれるか等、色々検証したい事もあったけど疲れたからパス。

もうideaはいやだ。。

参考にしたサイト

Android NDK
https://developer.android.com/ndk
Nim Compiler User Guide
https://nim-lang.org/docs/nimc.html#cross-compilation-for-android
Android Developers NDKガイド
https://developer.android.com/ndk/guides/concepts?hl=ja
jnim
https://github.com/yglukhov/jnim
Nimのプログラムをコンパイルしようとしたら ”error: size of array 'assert_numbits' is negative” とかいうエラーが出た話
https://qiita.com/eqs/items/77eb21d22f8f12c2ebfc
Gradle入門
https://qiita.com/vvakame/items/83366fbfa47562fafbf4

投稿者プロフィール

KARASU
うーん いろいろ考え中。。。

コメント

コメント取得中...

関連記事

TOPへ