Android用のネイティヴライブラリをC言語で書いています.これまでは,Visual Studioのエディタでコーディングした後,cygwinのコマンドラインでビルドしていました.今後はコーディングとビルドをAndroid Studioで行うことになりました.ところが,新環境では同じソースコードでも出力が異なります.そればかりか,途中でプログラムが予期せず中断されることがあります.
この調査が急務だったものの,それ以上の急務が立て込んだり,開発環境がうまく作れなかったりで,かれこれ3箇月ほど経ってしまっていました.ようやく着手でき,そこかしこ調べました.
結果,原因はlong型のサイズでした.コンパイラによって,long型が4バイト整数型として処理されたり,8バイト整数型として処理されたりしてたみたいです.その結果,Javaで書かれたAndroid用フロントアプリから整数型配列をJNIのAPIで変換する際,C言語の受け側をlong型ポインタにしている部分で予期せぬバイトアラインメントになっていた模様.過去にも,iOS用にXcodeでビルドするときにも同様の問題がありました.気をつけなはれや.