FC2ブログ

HelloJNI

2016.10.29 11:29  JNI

JavaからC/C++で作成したnativeコードを呼び出すだけのサンプルを試したときのメモです。

結果的に以下の2点で苦労しました。
・作成時: jni.hのパスが不明
・実行時: UnSatisfiedLinkError

【環境】
MacBook Air (11-inch, Mid 2011)
MacOS Sierra (10.12.1)
Java8 (Oracle)

【コンパイル】
1. Java
% javac HelloJNI.java

2. C (library作成)
(1) % javah HelloJNI
(2) % gcc -I$JNI_INCLUDE -dynamiclib -shared -o libhellonji.dylib hellojni.c (またはcpp)
※JNI_INCLUDE=/Applications/Xcode.app/Contents/Developer/Platforms/
MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/
System/Library/Frameworks/JavaVM.framework/Versions/A/Headers

※1:-sharedオプションが必要
※2:拡張子は.dylibでなければならない (Macの場合)

【配置】
HelloJNI.java
HelloJNI.class
lib/libhellojni.dylib

【実行】
% java -Djava.library.path=./lib HelloJNI

【ソース1 - HelloJNI.java】
1 public class HelloJNI {
2
3  native void printHello();
4  native void printString(String str);
5
6  static {
7   System.loadLibrary("hellojni");
8  }
9
10  public static void main(String[] args) {
11   HelloJNI myApp = new HelloJNI();
12
13   myApp.printHello();
14   myApp.printString("ABC");
15  }
16 }

【ソース2 - hellojni.c】
1 #include
2 #include "HelloJNI.h"
3
4 JNIEXPORT void JNICALL
  Java_HelloJNI_printHello(JNIEnv *env, jobject obj)
5 {
6  printf("Hello\n");
7  return;
8 }
9
10 JNIEXPORT void JNICALL
  Java_HelloJNI_printString(JNIEnv *env, jobject obj, jstring jstr)
11 {
12  const char *str = (*env)->GetStringUTFChars(env, jstr, NULL);
13  printf("%s\n", str);
14 (*env)->GetStringUTFChars(env, jstr, str);
15  return;
16 }

【ソース3 - hellojni.cpp】  (C++の場合)
1 #include
2 #include "HelloJNI.h"
3
4 JNIEXPORT void JNICALL
  Java_HelloJNI_printHello(JNIEnv *env, jobject obj)
5 {
6  printf("Hello\n");
7  return;
8 }
9
10 JNIEXPORT void JNICALL
  Java_HelloJNI_printString(JNIEnv *env, jobject obj, jstring jstr)
11 {
12  const char *str = env->GetStringUTFChars(jstr, NULL);
13  printf("%s\n", str);
14  env->ReleaseStringUTFChars(jstr, str);
15  return;
16 }
スポンサーサイト



| コメント(0) | トラックバック(0) | ↑ページトップ |

自作View

2012.11.24 15:53  Android

Viewを継承した自作Viewのサイズを自動調整する方法として、以下のGE Android Blogが参考になります。

自作Viewのサイズを自動調整する

Android Developersの参考ページ
Creating Custom Views

| コメント(1) | トラックバック(0) | ↑ページトップ |

Android SDK開発のレシピ 第2版

2012.11.24 12:16  Android

『Android SDK開発のレシピ』 第2版

わかりやすい、おもしろい、実践的。なのに比較的安い。



まださらっとしか読んでいないので詳細は割愛します。

| コメント(0) | トラックバック(0) | ↑ページトップ |

サポートパッケージ使用上の注意

2012.09.11 08:05  Android

API Level 10 (ver.2.3.3)以下でFragmentなどを使用する場合の注意事項

・Support Packageの組み込み
 プロジェクトを選択し、右クリックメニューから
  「Androidツール」→「Add Support Library...」


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Fragment fragment = new SampleFragment() ;
FragmentManager manager = getSupportFragmentManager() ;
FragmentTransaction transaction = manager.beginTransaction() ;
transaction.add(android.R.id.content, fragment).commit();
}
}

public class SampleFragment extends Fragment {
}



| コメント(0) | トラックバック(0) | ↑ページトップ |

Ubuntu 12.04にTeXの日本語環境を構築

2012.08.13 08:37  TeX

Ubuntu 12.04にTeXの日本語環境を構築

TeX Liveの最新版をインストール

xdviでは日本語は出ません。
platex & dvipdfmx でPDFを再作成して、日本語フォントが正しく表示されているのを確認しました。

上記サイトに従ったインストールで、奥村先生のjsarticleも使用できました。

※ TeXも数学もLinuxも℃素人であるため、質問しないでね。

| コメント(0) | トラックバック(0) | ↑ページトップ |

プロフィール

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

検索フォーム

RSSリンクの表示

リンク

ブロとも申請フォーム

QRコード