I tried to add an apple.* in the Import-Package tag, but it does not work. Anyway, that would have make my bundle OSX-dependent which is not the idea in the end (I want a multi-platform bundle, using fragments... next step of my work)
Benoît Le 4 nov. 2010 à 17:06, Richard S. Hall a écrit : > On 11/4/10 11:58, Richard S. Hall wrote: >> On 11/4/10 11:45, Richard S. Hall wrote: >>> On 11/4/10 11:21, Thiébault Benoît wrote: >>>> Thanks Richard ! >>>> Can I say I love you? >>> >>> (blush) Thank you. ;-) >>> >>>> "org.osgi.framework.bootdelegation=*" did the work and my VTK bundle works >>>> perfectly now. >>>> Just to understand what I just did, what is this variable doing? >>> >>> Bundle class loaders only make java.* packages from the boot class path >>> available to bundles by default. The normal Java class loader makes >>> everything available by default. Setting this property to * makes a bundle >>> class loader behave like a normal Java class loader (which isn't very >>> modular). >>> >>>> Regarding the processor, I indeed have a Core2Duo proc, which is 64bits. >>>> The VTK version I compiled is 64bits as well. >>> >>> Using boot delegation is generally bad practice. If you can help me get a >>> version of this bundle that works on my machine, then I can try to see if I >>> can get this to work properly without boot delegation. >>> >>> Strange thing, though, my processor is a Intel Core 2 Duo too, it says, so >>> I'm not sure why it doesn't work. >> >> Ok, I got it to work by starting Java like this: >> >> java -d64 -jar bin/felix.jar >> > > It looks like the bundle is being asked for apple.awt.ComponentModel, so it > is sufficient to do: > > org.osgi.framework.bootdelegation=apple.* > > Which is better than boot delegating everything. However, I will try to look > into it a little further to see if I can get it to work without boot > delegation at all. > > -> richard > >> >> >>> >>> -> richard >>>> Kind regards, and again thank you very much >>>> >>>> Benoît >>>> >>>> Le 4 nov. 2010 à 16:06, Richard S. Hall a écrit : >>>> >>>>> On 11/4/10 10:43, Thiébault Benoît wrote: >>>>>> Thank you Richard, >>>>>> >>>>>> I added "processor=x86_64" and it "worked". I now have the same error >>>>>> message than with Equinox :-) >>>>>> >>>>>> When I add like you "processor=x86", it crashes, but my error message is >>>>>> not as explicit as yours: >>>>>> >>>>>>> org.osgi.framework.BundleException: Unresolved constraint in bundle >>>>>>> test-osgi-vtk [5]: No matching native libraries found. >>>>> It appears that you have a different processor than me, which is why x86 >>>>> doesn't work for you. >>>>> >>>>>> I have two questions regarding this "processor" issue: >>>>>> - Could it be possible in future versions of felix to have a more >>>>>> detailed error message for this issue? >>>>> It is difficult to get a detailed error message, because the selecting of >>>>> matching libraries happens earlier than the resolve, so by then we don't >>>>> know why they didn't match. >>>>> >>>>>> - Is it a bug or a feature? I mean, what does the OSGi standard say >>>>>> about the "processor": is it mandatory (in this case, Felix is right to >>>>>> crash) or optional (and its a felix bug)? >>>>> It didn't crash, it just didn't resolve the bundle. >>>>> >>>>> I'm not sure about whether requiring processor is correct or not, so I >>>>> will look into it, but it would definitely be a best practice. >>>>> >>>>>> Now, regarding my VTK-specific error, does anyone have any clue what >>>>>> OSGi does that makes the pure Java application work and not the OSGi >>>>>> bundle? >>>>>> I have looked for an answer to this problem for days and can't find what >>>>>> causes it (and how to solve it) >>>>>> Any hint is thus very welcome :-) >>>>> Hard to say. For the fun of it, try editing conf/config.properties to >>>>> include: >>>>> >>>>> org.osgi.framework.bootdelegation=* >>>>> >>>>> And see if that has any impact. >>>>> >>>>> -> richard >>>>> >>>>>> Kind regards, >>>>>> >>>>>> Benoît >>>>>> >>>>>> Le 4 nov. 2010 à 15:26, Richard S. Hall a écrit : >>>>>> >>>>>>> It appears that Felix treats processor as a required attribute on the >>>>>>> native library, so you have to specify "processor=FOO" on the end of >>>>>>> your Bundle-NativeLibrary header. I added "processor=x86" and got it to >>>>>>> resolve on my Mac, but ended up getting errors when I started it: >>>>>>> >>>>>>> Caused by: java.lang.UnsatisfiedLinkError: >>>>>>> /Users/rickhall/Projects/felix-trunk/main/felix-cache/bundle5/version1.1/bundle.jar-lib/0/vtk/osx64b/libvtkproj4.jnilib: >>>>>>> no suitable image found. Did find: >>>>>>> /Users/rickhall/Projects/felix-trunk/main/felix-cache/bundle5/version1.1/bundle.jar-lib/0/vtk/osx64b/libvtkproj4.jnilib: >>>>>>> mach-o, but wrong architecture >>>>>>> >>>>>>> Not sure if processor should be required, but it seems like a good idea. >>>>>>> >>>>>>> -> richard >>>>>>> >>>>>>> >>>>>>> On 11/4/10 10:00, Thiébault Benoît wrote: >>>>>>>> Hi everyone, >>>>>>>> >>>>>>>> I am currently working on creating an OSGi bundle embedding VTK, the >>>>>>>> Visualization ToolKit (http://www.vtk.org), written in C++, on Mac OS >>>>>>>> X. >>>>>>>> >>>>>>>> I have written an article about my adventures and the related issues I >>>>>>>> have encountered so far: >>>>>>>> http://dev.artenum.com/blog/ben/posts/osgi_vtk_and_macosx >>>>>>>> >>>>>>>> The short story is that by default, the compilation configuration of >>>>>>>> VTK does not create and link properly the dynamic libraries on Mac OS >>>>>>>> X. I thus had to modify 3 things: >>>>>>>> • change the .dylib extensions to .jnilib >>>>>>>> • prepend the @loader_path prefix to the library transitive >>>>>>>> dependencies >>>>>>>> • remove the version numbers from the library file names and >>>>>>>> dependencies. >>>>>>>> >>>>>>>> This way, I managed to execute the bundle without an >>>>>>>> UnsatisfiedLinkError with Equinox. I however have a new problem, that >>>>>>>> seems much more complex to me. >>>>>>>> >>>>>>>> When the bundle starts, it creates a "vtkPanel", which extends the AWT >>>>>>>> Canvas. The rendering on the panel is then performed by a native >>>>>>>> method call that crashes. >>>>>>>> >>>>>>>>> WARNING in native >>>>>>>>> method: JNI call made with exception pending >>>>>>>>> at vtk.vtkPanel.RenderCreate(Native Method) >>>>>>>>> at vtk.vtkPanel.Render(vtkPanel.java:166) >>>>>>>>> - locked<1060ffa88> (a vtk.vtkPanel) >>>>>>>>> at vtk.vtkPanel.paint(vtkPanel.java:189) >>>>>>>>> at sun.awt.RepaintArea.paintComponent(RepaintArea.java:276) >>>>>>>>> at sun.awt.RepaintArea.paint(RepaintArea.java:241) >>>>>>>>> at apple.awt.ComponentModel.handleEvent(ComponentModel.java:263) >>>>>>>>> at java.awt.Component.dispatchEventImpl(Component.java:4790) >>>>>>>>> at java.awt.Component.dispatchEvent(Component.java:4544) >>>>>>>>> at java.awt.EventQueue.dispatchEvent(EventQueue.java:635) >>>>>>>>> at >>>>>>>>> java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) >>>>>>>>> at >>>>>>>>> java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) >>>>>>>>> at >>>>>>>>> java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) >>>>>>>>> at >>>>>>>>> java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) >>>>>>>>> at >>>>>>>>> java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) >>>>>>>>> at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) >>>>>>>>> FATAL ERROR in >>>>>>>>> native >>>>>>>>> method: Bad global or local ref passed to JNI >>>>>>>>> at vtk.vtkPanel.RenderCreate(Native Method) >>>>>>>>> at vtk.vtkPanel.Render(vtkPanel.java:166) >>>>>>>>> - locked<1060ffa88> (a vtk.vtkPanel) >>>>>>>>> at vtk.vtkPanel.paint(vtkPanel.java:189) >>>>>>>>> at sun.awt.RepaintArea.paintComponent(RepaintArea.java:276) >>>>>>>>> at sun.awt.RepaintArea.paint(RepaintArea.java:241) >>>>>>>>> at apple.awt.ComponentModel.handleEvent(ComponentModel.java:263) >>>>>>>>> at java.awt.Component.dispatchEventImpl(Component.java:4790) >>>>>>>>> at java.awt.Component.dispatchEvent(Component.java:4544) >>>>>>>>> at java.awt.EventQueue.dispatchEvent(EventQueue.java:635) >>>>>>>>> at >>>>>>>>> java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) >>>>>>>>> at >>>>>>>>> java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) >>>>>>>>> at >>>>>>>>> java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) >>>>>>>>> at >>>>>>>>> java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) >>>>>>>>> at >>>>>>>>> java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) >>>>>>>>> at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) >>>>>>>>> Invalid memory access of location 0x0 rip=0x1010af1f4 >>>>>>>>> ./ben.sh: line 11: 23453 Abort trap java -Xcheck:jni >>>>>>>>> -jar org.eclipse.osgi_3.6.0.v20100517.jar -console >>>>>>>> This native method crashes when calling the jawt.h method >>>>>>>> GetDrawingSurfaceInfo(ds), and I have no idea where it may come from. >>>>>>>> >>>>>>>> The pure Java (no OSGi) application works fine, so I thought it could >>>>>>>> be Equinox-related. This is why I tried to load the same bundle in >>>>>>>> Felix. >>>>>>>> But here I have a new error message: >>>>>>>> >>>>>>>>> org.osgi.framework.BundleException: Unresolved constraint in bundle >>>>>>>>> test-osgi-vtk [5]: No matching native libraries found. >>>>>>>> ... and nothing more (even with log level at 4). >>>>>>>> How can I know what does not work? >>>>>>>> What did I do that is Equinox-compatible and Felix-incompatible? I >>>>>>>> don't recall using specific Manifest entries... >>>>>>>> >>>>>>>> Project source code can be downloaded here: >>>>>>>> http://dev.artenum.com/blog/ben/download/test-osgi-vtk_zip?action=download&nodecorator >>>>>>>> >>>>>>>> Kind regards, >>>>>>>> >>>>>>>> Benoît >>>>>>>> --------------------------------------------------------------------- >>>>>>>> To unsubscribe, e-mail: users-unsubscr...@felix.apache.org >>>>>>>> For additional commands, e-mail: users-h...@felix.apache.org >>>>>>>> >>>>>>> --------------------------------------------------------------------- >>>>>>> To unsubscribe, e-mail: users-unsubscr...@felix.apache.org >>>>>>> For additional commands, e-mail: users-h...@felix.apache.org >>>>>>> >>>>>> --------------------------------------------------------------------- >>>>>> To unsubscribe, e-mail: users-unsubscr...@felix.apache.org >>>>>> For additional commands, e-mail: users-h...@felix.apache.org >>>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: users-unsubscr...@felix.apache.org >>>>> For additional commands, e-mail: users-h...@felix.apache.org >>>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: users-unsubscr...@felix.apache.org >>>> For additional commands, e-mail: users-h...@felix.apache.org >>>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@felix.apache.org >>> For additional commands, e-mail: users-h...@felix.apache.org >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@felix.apache.org >> For additional commands, e-mail: users-h...@felix.apache.org >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@felix.apache.org > For additional commands, e-mail: users-h...@felix.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@felix.apache.org For additional commands, e-mail: users-h...@felix.apache.org