まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

タグ:64bit

小型コンピュータのラズベリーパイ、一般的には Raspbian OS で使われることが多いと思っています(自分も特別な理由がなければ Raspbian OS か、または Raspbian の派生 OS で使います)。

が、Raspbian OS って 32bit OS なんですよね。ラズベリーパイ自体は 64bit CPU である arm64 を搭載していることを考えると、「せっかくなので 64bit で使いたい」ともなるわけです。

ラズベリーパイ上で動く 64bit OS はいくつかあるようです。ただリストを見ると「64bit 機能の一部が動かない」という注釈もあったりして、全てが期待通りの挙動をするかというと、そうでもなさそう・・・

というわけで、ラズベリーパイに 64bit Linux である openSUSE を導入する方法を紹介します。といっても導入だけなら Raspbian OS と特別に違うことはなく、どこからイメージをダウンロードするか、程度の違いですけどね。


ラズベリーパイ向けの openSUSE イメージをダウンロードするには、SuSE のラズベリーパイ用ページを参照します:
2019040202


下にスクロールすると、ダウンロードイメージへのリンクが現れます。いくつか種類がありますが、Tumbleweed(開発版)か Leap(安定版)を選び、デスクトップの種類を選択してイメージをダウンロードします。ちなみに僕は Tumbleweed の E20 image を選びました:
2019040201


後は Raspbian OS と同様でダウンロードしたイメージを展開し、(DDWin などのツールを使って)MicroSD カードに書き込み、そのカードをラズベリーパイに差し込んで起動します。

デフォルトのままであれば ID: root, PW: linux でログインできます:
shot-2019-04-02_23-08-13




Java のアプリ開発をしていて、こんな実行時エラーに遭遇することがあります:
java.lang.UnsatisfiedLinkError: C:\IBM\Notes\nlsxbe.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform


最近は Windows といえば 64bit 版が普通になってきました(よね?)。自分の開発環境も 64bit 版 Windows で、Java 開発環境も(JDK も JRE も Eclipse も)64bit 版を使っています。ここまでは珍しくないと思っています。

しかし開発するアプリケーションによっては外部ライブラリ(JAR ファイル)を指定する必要があり、その JAR ファイルが 32bit のネイティブライブラリを使っていたりするなど、64bit の JDK で 32bit 前提のコードを実行しなければならなくなった場合に上記のようなエラーが発生するのでした。

典型例としては、IBM Notes の Java API を使ったアプリケーション開発が挙げられます。2017/Oct/01 現在、Windows 版の IBM Notes は 32bit 版しか存在していません。Java で IBM Notes の API を実行するには IBM Notes 同梱の Notes.jar 他をインポートして使う必要がありますが、この Notes.jar は 32bit の DLL を参照するため、64bit Java から実行すると上記のエラーが発生します。


エラーの原因が分かったところで、どのように回避すればいいでしょうか? これも解決策としてはシンプルで 32bit Java(JRE) から実行すればよいことになります。32bit JRE をダウンロードして実行してもいいですが、上記のような IBM Notes の JAR を使った場合であれば、IBM Notes が使っている Java をそのまま指定して実行すればよいことになります。

ちとややこしいのが Eclipse のような IDE を使っている場合の指定方法です。まず Java - Installed JREs の中に Standard VM として Notes Java を追加しておく必要があります。Notes Java は(ノーツをインストールしたディレクトリ)/jvm にあるので、このディレクトリを指定して追加します:
2017100101


そして Eclipse の Java プロジェクトの中で JRE System Library として、上記で設定した Notes Java を指定します。これでこのプロジェクト内で作成したアプリを実行する際には Notes Java 内の java.exe が利用されるようになるので、上記のエラーが回避できるようになります:
2017100102



 

このページのトップヘ