こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Windows上でLinux向けのJNA開発

Javaで、Windows上でLinux向けのJNAを使ったコードの開発はどうやればいいでしょうか?

Javaなので本来はWin/Linuxの違いを無視出来ますが、JNA等を使う場合は無視出来ません。
Cygwinを使えばLinux向けのネイティブコード自体は開発出来ますが、
JNAでの連携部分の動作確認が出来ません。

Win上で動いているJavaからCygwin上で動いているネイティブコードへJNAを使ってアクセス出来るか?
あるいは、
Win上でEclipseを使いながらCygwin上で動くJavaプロジェクトを開発するにはどうすればいいか?
あるいは他にも手段があるかもしれませんが、聞きたいのはそういう事です。

よろしくお願いします。

投稿日時 - 2011-02-22 16:19:33

QNo.6542270

困ってます

質問者が選んだベストアンサー

No.1です。

実は私も昔、JNIを使ったことがあります。
しかもWindowsとLinuxの両方のコードを書きました。

そのときはWindows環境ではVC++、
Linux環境はgccでした。

Windows環境でコンパイルしたバイナリは当然Linuxではうごきません。
たとえCygwin用であっても!
ですからWindows、Linuxそれぞれでコンパイルすることになります。

C言語で書いた部分はTCPまたはUDPで通信する部分でしたので
WinでもLinuxでもさほどは変わらなかったのですが
やはり違うところは違います。

その部分はあきらめてサクっと思い切って違うソースにして
コンパイルのときに振分けるようにしました。

#define や #ifdef など
Cのプリコンパイラを駆使し、また
コンパイルにAntを使って
コンパイル環境を自動判別させて
Windows環境であればWindowの、
Linux環境であればLinux用のコンパイルバッチ(makefile)を
起動するようにします。

まぁ、まずはWindowsでうごくものを作りましょう。
其の後でLinux環境を用意するか
VMWareなどをつかってWindows上にLinux環境をつくり
そこでLinuxでうごくプログラムに改造して
それぞれでうまくコンパイルできるようにします。
そしてJNIを呼び出す側、
すなわちJava側で
WindwsのJNIを呼び出すクラス、
LinuxのJNIを呼び出すクラス
をそれぞれつくり、
なんらかの方法で実行している環境がWinかLinuxかを判断して
Win用かLinux用かどちらかのJNI呼び出しクラスを呼び出す
というのが妥当な腺かと思います。
すくなくともわたしはそうしました。

投稿日時 - 2011-02-25 03:28:48

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

No.1,2です。
ちなみに、JNIはJNAの前の技術

投稿日時 - 2011-02-25 03:39:25

ANo.1

Cygwinとリンクさせるのは・・・
かなり厳しいんではないかと思うのですが
gcc のWindowsでの実装であるMinGW というのがあります。
MinGWで検索すればいろいろ出てきます。
EclipseでMinGWを使う方法も出て来ます。
こちらをつかってみてはいかがでしょうか。

投稿日時 - 2011-02-23 11:05:58

お礼

参考になりました。
しかし、未だにJNI等を使う場合のクロスプラットフォーム開発においてどういう環境を構築すればいいのか、
主流な方法が分からないでいます。
とりあえずMinGWをEclipseから使って、ライブラリの依存関係等に注意しながら書いていくつもりですが、
何か見逃しがあればLinux上で動かないという事になってしまうので難しいと思いますし、
どういった点に注意すればいいのかというまとめた記事も見つからないので戦々恐々としながらです。

引き続き何か情報を募集します。

投稿日時 - 2011-02-23 23:07:13

あなたにオススメの質問