- PR -

64ビットモードでのJNI

投稿者投稿内容
finch
常連さん
会議室デビュー日: 2006/09/29
投稿数: 26
投稿日時: 2007-01-25 09:51
64ビットモードのjavaから、JNIでCのプログラムを呼ぶ際、呼ばれるCのプログラムと、さらにそこから呼ばれるプログラムも、64ビットアプリケーションである必要があるでしょうか?
(呼び出しは、コマンド経由の呼び出しでは無く、関数呼び出しです)

環境としては、以下の二つを考えております。

(1)
プロセッサ:IA-64
OS:HP-UX 11i v2
Cコンパイラ:HP Cコンパイラ

(2)
プロセッサ:EM64T
OS:Red Hat Enterprise Linux AS 4
Cコンパイラ:gcc

ご存知の方がいらっしゃいましたら、ご教授お願いできればと思います。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-01-25 11:59
ふつうに考えればそうなんじゃないでしょうか。
finch
常連さん
会議室デビュー日: 2006/09/29
投稿数: 26
投稿日時: 2007-01-25 13:10
返信ありがとうございます。

(1)に関してはそうだと考えておりましたが、明記されたものが見つからず、ここで質問させて頂いた次第です。

(2)に関しては、64ビットアプリケーションで無くても大丈夫ではないかと推測しておりました。
何故かというと、AMD64に関してではありますが、「64ビットモードと互換モードは、コードセグメントごとに切り替えて共存させることができる」という情報がありましたので、32ビットアプリが混じっても大丈夫ではないかと思った次第です。

情報をお持ちの方がいらっしゃいましたら、お願いいたします。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-01-25 13:11
こんにちは。

引用:

finchさんの書き込み (2007-01-25 09:51) より:
64ビットモードのjavaから、JNIでCのプログラムを呼ぶ際、呼ばれるCのプログラムと、さらにそこから呼ばれるプログラムも、64ビットアプリケーションである必要があるでしょうか?



64 ビット Sparc-v9 プラットフォームの話ですが
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/guide/vm/index.html
下記のように書かれていますけれども、

引用:

Java Native Interface を使用するには、コードを再コンパイルして 64 ビットの VM で動作できるようにする必要があります。



64ビットの移植には、下記のサイトは参考にならないでしょうか。
Linuxアプリケーションの64ビット・システムへの移植

Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-01-25 13:20
追記です。参考にならないでしょうか。

WebLogicのドキュメントのようですが、
http://h50146.www5.hp.com/products/software/oe/hpux/developer/document/pdfs/PDFHS04085-01.pdf#search='64%E3%83%93%E3%83%83%E3%83%88%E3%83%A2%E3%83%BC%E3%83%89%20Java'
から引用

引用:

7.3 HP-UX の JNI について
以下に HP-UX 固有の特徴について解説します。
・HP-UX 11i は、32 ビット モードのプログラムでも、64 ビット モードのプログラムのどちらでも、動作させることができます。
・Java はデフォルトが 32 ビット モードですが、java -d64 オプションを使うことで 64 ビット モードで動作させることも可能です。従って、JNI も 32 ビット、64 ビットの両方のモードをサポートしています。Java の 64 ビット・モードは、Java 1.4 からサポートしています。
・Java が 32 ビット モードのときは、32 ビット モードでコンパイルされた C 言語の共有ライブラリを呼び出すことができます。C コンパイラはデフォルト状態で 32 ビット・モードです。
・Java が 64 ビット モードのときは、64 ビット モードでコンパイルされた C 言語の共有ライブラリを呼び出すことができます。C 言語を 64 ビット モードでコンパイルするには C コンパイラの +DD64 オプションを使います。
・JNI の共有ライブラリのファイル名は、PA-RISC 32 ビット モードや 64 ビット モードでは lib*.sl ですが、Itanium 32 ビット モードや Itanium 64 ビット モードでは lib*.so というファイル名となりました。従って、Itanium/HP-UX においては、Linux や Solaris と同じく、lib*.so というファイル名を使ってください。
・HP-UX 11i V2 用の WebLogic 8.1 SP2 は、32 ビット モードのみをサポートしています。そのため、WebLogic 上のアプリケーションから JNI を使用する場合は、32 ビット モードにて C 言語をコンパイルしてください。




[ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2007-01-25 13:33 ]
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2007-01-25 14:10
AMD64/EM64T 用の Windows x64 も Linux も、1つのユーザプロセス内に64bitコードと32bitコードを混在させることはできません。

引用:

「64ビットモードと互換モードは、コードセグメントごとに切り替えて共存させることができる」



OSがその機能を使って、64bitプロセスと32bitプロセスの同居を実現するんでしょう。

[ メッセージ編集済み 編集者: スフレ 編集日時 2007-01-25 14:12 ]
finch
常連さん
会議室デビュー日: 2006/09/29
投稿数: 26
投稿日時: 2007-01-25 14:51
Tdnr_Symさん、スフレさん、返信ありがとうございます。

(1)に関しては、WebLogicのドキュメントから、「32ビットJavaからは32ビットアプリ、64ビットJavaからは64ビットアプリしか呼び出せない」という事だと思います(リンク先も同様と思います)。

(2)に関しては、スフレさんに返信頂いた内容から、「一つのプロセス内に32ビットコードと64ビットコードを混在させる事はできない」という事ですので、JNIによる呼び出しも(1)と同じになると考えられます。
finch
常連さん
会議室デビュー日: 2006/09/29
投稿数: 26
投稿日時: 2007-01-25 15:24
すいません、一応確認させて頂きたく、返信致しました。

例えば、下記のサイトを見ますと、「64ビットベースで書かれたプログラムから32ビットベースのライブラリを呼び出して実行する、といったことも可能である。」と書かれています。

http://e-words.jp/w/x86-64.html

ですから、AMD64の場合(おそらくEM64Tも)、1つのユーザプロセス内に64bitコードと32bitコードを混在させることができるように思えるのですが、OSレベルで、可能となっていないという事でしょうか?

スキルアップ/キャリアアップ(JOB@IT)