question

11989479 avatar image
0 Votes"
11989479 asked 11989479 commented

[Azure-IoT-Edge]Can not run with arm64v8/openjdk:8-jre-alpine docker image

I am running a Java app with arm64v8/openjdk:8-jre-alpine docker image, and I met following error, how can I fix it?

 Start to create client with MQTT protocol
 Exception in thread "main" java.lang.UnsatisfiedLinkError: could not load FFI provider jnr.ffi.provider.jffi.Provider
  at jnr.ffi.provider.InvalidRuntime.newLoadError(InvalidRuntime.java:101)
  at jnr.ffi.provider.InvalidRuntime.findType(InvalidRuntime.java:42)
  at jnr.ffi.Struct$NumberField.<init>(Struct.java:872)
  at jnr.ffi.Struct$Unsigned16.<init>(Struct.java:1240)
  at jnr.unixsocket.SockAddrUnix$DefaultSockAddrUnix.<init>(SockAddrUnix.java:209)
  at jnr.unixsocket.SockAddrUnix.create(SockAddrUnix.java:174)
  at jnr.unixsocket.UnixSocketAddress.<init>(UnixSocketAddress.java:53)
  at com.microsoft.azure.sdk.iot.device.hsm.HttpsHsmClient.sendHttpRequestUsingUnixSocket(HttpsHsmClient.java:250)
  at com.microsoft.azure.sdk.iot.device.hsm.HttpsHsmClient.sendRequestBasedOnScheme(HttpsHsmClient.java:226)
  at com.microsoft.azure.sdk.iot.device.hsm.HttpsHsmClient.sign(HttpsHsmClient.java:112)
  at com.microsoft.azure.sdk.iot.device.hsm.HttpHsmSignatureProvider.sign(HttpHsmSignatureProvider.java:85)
  at com.microsoft.azure.sdk.iot.device.hsm.IotHubSasTokenHsmAuthenticationProvider.createNewSasToken(IotHubSasTokenHsmAuthenticationProvider.java:80)
  at com.microsoft.azure.sdk.iot.device.hsm.IotHubSasTokenHsmAuthenticationProvider.create(IotHubSasTokenHsmAuthenticationProvider.java:48)
  at com.microsoft.azure.sdk.iot.device.ModuleClient.createFromEnvironment(ModuleClient.java:235)
  at com.debugapp.App.outputModuleTwin(App.java:170)
  at com.debugapp.App.main(App.java:452)
 Caused by: java.lang.UnsatisfiedLinkError: could not get native definition for type: POINTER
  at com.kenai.jffi.Type$Builtin.lookupTypeInfo(Type.java:251)
  at com.kenai.jffi.Type$Builtin.getTypeInfo(Type.java:237)
  at com.kenai.jffi.Type.resolveSize(Type.java:155)
  at com.kenai.jffi.Type.size(Type.java:138)
  at jnr.ffi.provider.jffi.NativeRuntime$TypeDelegate.size(NativeRuntime.java:178)
  at jnr.ffi.provider.AbstractRuntime.<init>(AbstractRuntime.java:48)
  at jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:57)
  at jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:41)
  at jnr.ffi.provider.jffi.NativeRuntime$SingletonHolder.<clinit>(NativeRuntime.java:53)
  at jnr.ffi.provider.jffi.NativeRuntime.getInstance(NativeRuntime.java:49)
  at jnr.ffi.provider.jffi.Provider.<init>(Provider.java:29)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  at java.lang.Class.newInstance(Class.java:442)
  at jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.getInstance(FFIProvider.java:68)
  at jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.<clinit>(FFIProvider.java:57)
  at jnr.ffi.provider.FFIProvider.getSystemProvider(FFIProvider.java:35)
  at jnr.ffi.Runtime$SingletonHolder.<clinit>(Runtime.java:82)
  at jnr.ffi.Runtime.getSystemRuntime(Runtime.java:67)
  at jnr.unixsocket.SockAddrUnix.<init>(SockAddrUnix.java:46)
  at jnr.unixsocket.SockAddrUnix$DefaultSockAddrUnix.<init>(SockAddrUnix.java:208)
  ... 11 more
 Caused by: java.lang.UnsatisfiedLinkError: java.lang.UnsatisfiedLinkError: /tmp/jffi2014448651014323514.so: Error loading shared library ld-linux-aarch64.so.1: No such file or directory (needed by /tmp/jffi2014448651014323514.so)
  at java.lang.ClassLoader$NativeLibrary.load(Native Method)
  at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
  at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)
  at java.lang.Runtime.load0(Runtime.java:809)
  at java.lang.System.load(System.java:1086)
  at com.kenai.jffi.internal.StubLoader.loadFromJar(StubLoader.java:380)
  at com.kenai.jffi.internal.StubLoader.load(StubLoader.java:262)
  at com.kenai.jffi.internal.StubLoader.<clinit>(StubLoader.java:453)
  at java.lang.Class.forName0(Native Method)
  at java.lang.Class.forName(Class.java:348)
  at com.kenai.jffi.Init.load(Init.java:68)
  at com.kenai.jffi.Foreign$InstanceHolder.getInstanceHolder(Foreign.java:49)
  at com.kenai.jffi.Foreign$InstanceHolder.<clinit>(Foreign.java:45)
  at com.kenai.jffi.Foreign.getInstance(Foreign.java:103)
  at com.kenai.jffi.Type$Builtin.lookupTypeInfo(Type.java:242)
  at com.kenai.jffi.Type$Builtin.getTypeInfo(Type.java:237)
  at com.kenai.jffi.Type.resolveSize(Type.java:155)
  at com.kenai.jffi.Type.size(Type.java:138)
  at jnr.ffi.provider.jffi.NativeRuntime$TypeDelegate.size(NativeRuntime.java:178)
  at jnr.ffi.provider.AbstractRuntime.<init>(AbstractRuntime.java:48)
  at jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:57)
  at jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:41)
  at jnr.ffi.provider.jffi.NativeRuntime$SingletonHolder.<clinit>(NativeRuntime.java:53)
  at jnr.ffi.provider.jffi.NativeRuntime.getInstance(NativeRuntime.java:49)
  at jnr.ffi.provider.jffi.Provider.<init>(Provider.java:29)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  at java.lang.Class.newInstance(Class.java:442)
  at jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.getInstance(FFIProvider.java:68)
  at jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.<clinit>(FFIProvider.java:57)
  at jnr.ffi.provider.FFIProvider.getSystemProvider(FFIProvider.java:35)
  at jnr.ffi.Runtime$SingletonHolder.<clinit>(Runtime.java:82)
  at jnr.ffi.Runtime.getSystemRuntime(Runtime.java:67)
  at jnr.unixsocket.SockAddrUnix.<init>(SockAddrUnix.java:46)
  at jnr.unixsocket.SockAddrUnix$DefaultSockAddrUnix.<init>(SockAddrUnix.java:208)
  at jnr.unixsocket.SockAddrUnix.create(SockAddrUnix.java:174)
  at jnr.unixsocket.UnixSocketAddress.<init>(UnixSocketAddress.java:53)
  at com.microsoft.azure.sdk.iot.device.hsm.HttpsHsmClient.sendHttpRequestUsingUnixSocket(HttpsHsmClient.java:250)
  at com.microsoft.azure.sdk.iot.device.hsm.HttpsHsmClient.sendRequestBasedOnScheme(HttpsHsmClient.java:226)
  at com.microsoft.azure.sdk.iot.device.hsm.HttpsHsmClient.sign(HttpsHsmClient.java:112)
  at com.microsoft.azure.sdk.iot.device.hsm.HttpHsmSignatureProvider.sign(HttpHsmSignatureProvider.java:85)
  at com.microsoft.azure.sdk.iot.device.hsm.IotHubSasTokenHsmAuthenticationProvider.createNewSasToken(IotHubSasTokenHsmAuthenticationProvider.java:80)
  at com.microsoft.azure.sdk.iot.device.hsm.IotHubSasTokenHsmAuthenticationProvider.create(IotHubSasTokenHsmAuthenticationProvider.java:48)
  at com.microsoft.azure.sdk.iot.device.ModuleClient.createFromEnvironment(ModuleClient.java:235)
  at com.tc.debugapp.App.outputModuleTwin(App.java:170)
  at com.tc.debugapp.App.main(App.java:452)
    
  at com.kenai.jffi.Foreign.newLoadError(Foreign.java:72)
  at com.kenai.jffi.Foreign.access$300(Foreign.java:42)
  at com.kenai.jffi.Foreign$InValidInstanceHolder.getForeign(Foreign.java:98)
  at com.kenai.jffi.Foreign.getInstance(Foreign.java:103)
  at com.kenai.jffi.Type$Builtin.lookupTypeInfo(Type.java:242)
  ... 33 more
 Caused by: java.lang.UnsatisfiedLinkError: java.lang.UnsatisfiedLinkError: /tmp/jffi2014448651014323514.so: Error loading shared library ld-linux-aarch64.so.1: No such file or directory (needed by /tmp/jffi2014448651014323514.so)
  at java.lang.ClassLoader$NativeLibrary.load(Native Method)
  at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
  at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)
  at java.lang.Runtime.load0(Runtime.java:809)
  at java.lang.System.load(System.java:1086)
  at com.kenai.jffi.internal.StubLoader.loadFromJar(StubLoader.java:380)
  at com.kenai.jffi.internal.StubLoader.load(StubLoader.java:262)
  at com.kenai.jffi.internal.StubLoader.<clinit>(StubLoader.java:453)
  at java.lang.Class.forName0(Native Method)
  at java.lang.Class.forName(Class.java:348)
  at com.kenai.jffi.Init.load(Init.java:68)
  at com.kenai.jffi.Foreign$InstanceHolder.getInstanceHolder(Foreign.java:49)
  at com.kenai.jffi.Foreign$InstanceHolder.<clinit>(Foreign.java:45)
  at com.kenai.jffi.Foreign.getInstance(Foreign.java:103)
  at com.kenai.jffi.Type$Builtin.lookupTypeInfo(Type.java:242)
  at com.kenai.jffi.Type$Builtin.getTypeInfo(Type.java:237)
  at com.kenai.jffi.Type.resolveSize(Type.java:155)
  at com.kenai.jffi.Type.size(Type.java:138)
  at jnr.ffi.provider.jffi.NativeRuntime$TypeDelegate.size(NativeRuntime.java:178)
  at jnr.ffi.provider.AbstractRuntime.<init>(AbstractRuntime.java:48)
  at jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:57)
  at jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:41)
  at jnr.ffi.provider.jffi.NativeRuntime$SingletonHolder.<clinit>(NativeRuntime.java:53)
  at jnr.ffi.provider.jffi.NativeRuntime.getInstance(NativeRuntime.java:49)
  at jnr.ffi.provider.jffi.Provider.<init>(Provider.java:29)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  at java.lang.Class.newInstance(Class.java:442)
  at jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.getInstance(FFIProvider.java:68)
  at jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.<clinit>(FFIProvider.java:57)
  at jnr.ffi.provider.FFIProvider.getSystemProvider(FFIProvider.java:35)
  at jnr.ffi.Runtime$SingletonHolder.<clinit>(Runtime.java:82)
  at jnr.ffi.Runtime.getSystemRuntime(Runtime.java:67)
  at jnr.unixsocket.SockAddrUnix.<init>(SockAddrUnix.java:46)
  at jnr.unixsocket.SockAddrUnix$DefaultSockAddrUnix.<init>(SockAddrUnix.java:208)
  at jnr.unixsocket.SockAddrUnix.create(SockAddrUnix.java:174)
  at jnr.unixsocket.UnixSocketAddress.<init>(UnixSocketAddress.java:53)
  at com.microsoft.azure.sdk.iot.device.hsm.HttpsHsmClient.sendHttpRequestUsingUnixSocket(HttpsHsmClient.java:250)
  at com.microsoft.azure.sdk.iot.device.hsm.HttpsHsmClient.sendRequestBasedOnScheme(HttpsHsmClient.java:226)
  at com.microsoft.azure.sdk.iot.device.hsm.HttpsHsmClient.sign(HttpsHsmClient.java:112)
  at com.microsoft.azure.sdk.iot.device.hsm.HttpHsmSignatureProvider.sign(HttpHsmSignatureProvider.java:85)
  at com.microsoft.azure.sdk.iot.device.hsm.IotHubSasTokenHsmAuthenticationProvider.createNewSasToken(IotHubSasTokenHsmAuthenticationProvider.java:80)
  at com.microsoft.azure.sdk.iot.device.hsm.IotHubSasTokenHsmAuthenticationProvider.create(IotHubSasTokenHsmAuthenticationProvider.java:48)
  at com.microsoft.azure.sdk.iot.device.ModuleClient.createFromEnvironment(ModuleClient.java:235)
  at com.tc.debugapp.App.outputModuleTwin(App.java:170)
  at com.tc.debugapp.App.main(App.java:452)
    
  at com.kenai.jffi.internal.StubLoader.load(StubLoader.java:274)
  at com.kenai.jffi.internal.StubLoader.<clinit>(StubLoader.java:453)
  at java.lang.Class.forName0(Native Method)
  at java.lang.Class.forName(Class.java:348)
  at com.kenai.jffi.Init.load(Init.java:68)
  at com.kenai.jffi.Foreign$InstanceHolder.getInstanceHolder(Foreign.java:49)
  at com.kenai.jffi.Foreign$InstanceHolder.<clinit>(Foreign.java:45)
  ... 35 more
azure-iot-edgeazure-iot-sdk
· 3
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

@11989479 Sorry for the delay in response.
It is hard to tell what is going wrong here without much details. Could you please share more details? What document are you following? When are you getting this error message?
Is there a sample available and you have customized it?

0 Votes 0 ·
11989479 avatar image 11989479 AshokPeddakotla-MSFT ·

Thanks for your feedback.

My IoT Edge device info:
OS: ubuntu 18.04 arm64
IoT Edge: 1.2

I create a java solution in VS code.
Only modify the following code:

Dockerfile.arm64v8

  - FROM arm64v8/openjdk:8-jdk-slim
 + FROM arm64v8/openjdk:8-jdk-alpine

Because 8-jdk-alpine is smaller than 8-jdk-slim, I want to use a small one.

Then I deploy it to my device, and this error occured.

1 Vote 1 ·

One more file modified:

deployment.template.json

 - "image": "${MODULES.TestApp}",
 + "image": "${MODULES.TestApp.arm64v8}",


1 Vote 1 ·

0 Answers