¿Cómo usar los fragmentos OSGi para contribuir con código nativo dependiente de la plataforma con el mismo nombre de archivo?

Estoy usando elJNotificar Proyecto para escuchar eventos del sistema de archivos. Esto depende de una biblioteca nativa por sistema operativo: la arquitectura del procesador. Por ejemplo, hay una biblioteca para Windows x86, una biblioteca para x86-64, etc.

Haz monolítico

Originalmente, tenía un paquete que contenía tanto las clases Java de JNotify como el código nativo. El código nativo se declaró en Bundle-NativeCode como sigue:

(He formateado estos en el estilo bnd para una mejor legibilidad ... obviamente, los archivos MANIFEST.MF reales están formados correctamente).

Bundle-NativeCode: jnotify_64bit.dll;osname=Win32;osname="Windows NT (unknown)";osname = WindowsXP;osname = Windows2000;osname = Windows2003;osname = WindowsVista;osname = Windows7;osname = WindowsServer2008;osname= Windows8;osname = WindowsServer2012;processor = x86-64,\
 jnotify.dll;osname=Win32;osname="Windows NT (unknown)";osname = WindowsXP;osname = Windows2000;osname = Windows2003;osname = WindowsVista;osname = Windows7;osname = WindowsServer2008;osname = Windows8;osname = WindowsServer2012;processor = x86,\
 libjnotify.so;osname = Linux;processor = x86,\
 libjnotify64.so;osname = Linux;processor = x86-64,\
 libjnotify.dylib;osname = Mac OSX;processor = x86;processor = x86-64,\
 *

Esto funcionó bien.

Mover a fragmentos

Pensé que sería 'bueno' si moviera las bibliotecas a paquetes de fragmentos separados para poder contribuir con los fragmentos de la arquitectura en la que estoy interesado. Tomando el ejemplo de Linux, los dividí en dos paquetes:

Linux 32 bit

Include-Resource: lib/libjnotify.so
Bundle-NativeCode: libjnotify.so;osname = Linux;processor = x86,\
    *
Fragment-Host: net.contentobjects.jnotify
Bundle-Version: 0.94.0

Linux 64 bit

Include-Resource: lib/libjnotify.so
Bundle-NativeCode: libjnotify.so;osname = Linux;processor = x86-64,\
    *
Fragment-Host: net.contentobjects.jnotify
Bundle-Version: 0.94.0

Tenga en cuenta que estos paquetes están construidos desde diferentes fuentes. Aunque el nombre de archivo libjnotify.so es el mismo, son archivos diferentes en diferentes proyectos de Eclipse. Tienen que ser los mismos para trabajar con JNotify.

Tenga en cuenta que el mismo nombre de archivo se contribuye al paquete de host. En este caso el nombre del archivo es libjnotify.so.

Si los ejecuto en mi máquina de 64 bits con el paquete de 64 bits que se está cargandoantes de El de 32 bits uno, funciona.

Sin embargo, si el paquete de 32 bits se carga primero, obtengo:

Couldn't initialise JNotify: java.lang.UnsatisfiedLinkError: /blah/generated/fw/bundle46/version0.0/net.contentobjects.jnotify.linux.x86-0.94.0.jar-lib/0/libjnotify.so: /blah/generated/fw/bundle46/version0.0/net.contentobjects.jnotify.linux.x86-0.94.0.jar-lib/0/libjnotify.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch) (JnotifyFileSystemObserver.java:53, thread platformExecutor)

Claramente la biblioteca de 32 bits se está cargando.¿Pero por qué? My Bundle-NativeCode define que el host debe ser una máquina Linux de 32 bits para usar la versión del paquete de 32 bits. Pensé que si esa cláusula no coincide, la biblioteca es ignorada?

Cosas que he probadoEliminando el comodín opcional ... esto solo significa que los paquetes no se resuelven