Наша команда пытается связать pi4j -lib в качестве пакета OSGi для доступа к GPIO на малиновом Pi, но мы получаем UnsatisfiedLinkError
и не знаем, что здесь происходит и как его решить ,UnsatisfiedLinkError при загрузке собственной библиотеки linux в OSGi
Ставит родную libpi4j.so
в папке /lib
пучка, и уточнил MANIFEST.MF
так:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Pi4j
Bundle-SymbolicName: com.pi4j
Bundle-Version: 1.0.0.SNAPSHOT
Bundle-Vendor: http://pi4j.com/
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-NativeCode: lib/libpi4j.so; osname=linux;processor=arm
Eclipse-PlatformFilter: (& (osgi.os=linux) (osgi.arch=arm))
Bundle-ClassPath: lib/, .
Export-Package: com.pi4j.concurrent,[.. some more packages]
Это ошибка-сообщение:
!SESSION 2013-02-10 08:21:25.975 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.7.0_40
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=arm, WS=gtk, NL=de_DE
!ENTRY org.eclipse.osgi 4 0 2013-02-10 08:21:37.256
!MESSAGE Application error
!STACK 1
java.lang.UnsatisfiedLinkError: no libpi4j in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1878)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1087)
at com.pi4j.util.NativeLibraryUser.<clinit>(NativeLibraryUser.java:36)
at eu.gemtec.carepi.app.Application.start(Application.java:30)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
Класс NativeLibraryUser
имеет звоните в System.loadLibrary("libpi4j")
, чтобы загрузить родной. Нативный присутствует в /lib
- папке с пакетом, так что это не проблема. Что здесь происходит, почему это не работает?
Если я правильно помню, равноденствие распаковывает родной пул пучков, чтобы загрузить его, но я не могу найти его для нашего приложения, это проблема?
Попробуйте вызвать только «System.loadLibrary (« pi4j »)». Префикс lib и .so добавляются автоматически. –
Это решение! Если вы создадите ответ, я его приму. Можете ли вы предоставить список схемы именования, используемой для других платформ? – Chriss