2013年3月27日水曜日

Android JNI トラブル(ADT20130219版)


長年システム開発を行っているが、毎回ちょっとしたことでいろいろなトラブルに出会う。
その対策について、忘備録としてこのブログを使用しようと思う。
この忘備録が同様の開発者たちに少しでも役立てばと思う。

■ 今回のトラブル

   以前開発したAndroidアプリを新しい環境(adt-bundle-windows-x86-20130219.zip)にて再構築を行った際、JNIで開発したCソースが突然ビルドエラーとなった。

 何が悪いのだ? ・・ とにかく悩む。
 慣れないWindows版を使用したからか?
 慣れた環境(Ubuntu12.04 32bit版)でも同様の環境を構築してみたが、同じくSemantic Errorが発生しビルドできない。

■ ソースファイル

  #include <stdlib.h>
  #include "com_maxport_memtest_memtest01.h"
  JNIEXPORT jboolean JNICALL Java_com_maxport_memtest_funcmemtest( JNIEnv *env, jobject obj )
   {
       pByteDat = ( char * )malloc( 100 );
       return( true );
   }


mallocにSemantic Error発生!
長年使い慣れたmalloc関数でこんなエラーはどう考えてもありえない。
何がどう違うのかさっぱりわからない状態で時間だけが経過していった。

※ malloc、memset、read、writeなどに同様のエラーが発生している。

■ 対策

 結局はEclipseのビルド環境設定を見直しただけで解決できた。

 プロパティ → C/C++ General → Code Analysis 
 ここで Invalid arguments のエラーチェックを外せばよい。

 ※ こちら日本語化していないので、 日本語化した場合の表示内容は不明。

Invalid argumentsのチェックを外す。
  ビルドエラーはなくなり、無事にビルド完了!

 以前の環境(2012年9月あたりにUbuntu12.04上で構築した環境)では問題なかったので、新しい環境でこうなってしまったのだろう。
 OSや開発環境のバージョンアップにいつも振り回されてばかりだ ・・・

0 件のコメント:

コメントを投稿