暗号化に libsodium を使用するソフトウェアの開発に取り組んでいます...<a href="https://github.com/joshjdevl/libsodium-jni" rel="nofollow">Java で。macOS 10.11/10.12 と Ubuntu Server 16.04 の両方で問題なく動作しました。Amazon Linux を使用して Amazon EC2 インスタンスでソフトウェアを実行しようとすると ( return )、次のエラーが発生しますuname -a
。Linux ip-$IPADDR 4.4.19-29.55.amzn1.x86_64 #1 SMP Mon Aug 29 23:29:40 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
java.lang.UnsatisfiedLinkError: /home/ec2-user/myproject/target/classes/linux-x86-64/libsodiumjni.so: /usr/lib64/libc.so: invalid ELF header
このマシンのASCIIlibc.so
ファイルは次のとおりです。
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf64-x86-64)
GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a AS_NEEDED ( /lib64/ld-linux-x86-64.so.2 ) )
代わりにローダーを試してもらうために、引数を指定してコードを実行しようとし-Djava.library.path=/lib64/:…:$NORMALLIBRARYPATH
ましたが、うまくいきませんでした。/lib64/libc.so.6
libsodiumjni.so をロードするコードのセクションは次のとおりです。
import com.sun.jna.Native;
…
File libraryFile = Native.extractFromResourcePath(libraryName);
System.load(libraryFile.getAbsolutePath());
私のプロジェクト内のディレクトリ構造には、JNA のネイティブ クラスが理解できるパスにライブラリ ファイルが含まれています。
src/main/resources
├── darwin
│ └── libsodiumjni.dylib
└── linux-x86-64
└── libsodiumjni.so
ヒバリで、ASCII libc.so を削除し、/lib64/libc-2.17.so へのシンボリック リンクに置き換えたところ、わずかに異なるエラーが発生しました。
java.lang.UnsatisfiedLinkError: /home/ec2-user/myproject/target/classes/linux-x86-64/libsodiumjni.so: /lib64/libc.so.6: version `LIBC' not found (required by /home/ec2-user/myproject/target/classes/linux-x86-64/libsodiumjni.so
私はこれについて何をすべきか本当に分かりません。libsodium を ( libsodium-jniを介して) 引き続き使用したいのですが、ここで壁にぶつかっています。このプロジェクトでは多くのプラットフォームの互換性が重要であるため、別のライブラリに切り替える必要がある場合があります。