macos java.lang.UnsatisfiedLinkError image not found

Having problems with building or using the JCEF Java binding? Ask your questions here.

macos java.lang.UnsatisfiedLinkError image not found

Postby jeff6times7 » Tue Jul 31, 2018 3:56 pm

Sorry, I didn't find any existing topic in this JCEF forum for my problem. I also didn't find any "inclusion" instructions in the source tree. Can you review my topic and let me know what you think? I must be doing something wrong because the test app is working fine. I just can figure out why my attempt to incorporate the jcef app's files into mine is failing.

I cloned the repo and my wc is at 1fda5d8f948670d08ef86bc4e8637b8581995ce9, which Marshall committed 2018-07-24.

Using the macos instructions, I successfully created the Release and Debug products for the project. Both product's app opens just fine. When I run the JavaAppLauncher from the command line I can see debug output.

So far, so good.

Then I reviewed the content of jcef_app.app and saw how that app is built by src/build.xml. Since I make my app with ant, I figured I hit gold. I made a simple edit to build.xml to remove the unused component in the java.library.path (which is $APP_ROOT/Contents/Frameworks/Chromium Embedded Framework.framework/Libraries). Then I built again and saw change reflected in the app's Info.plist. The app still opens.

Very, very good, so far.

I ran the following commands to copy the "support" files from jcef app to my app. Let $mytop be the path to my app's Contents folder and let $jceftop be the path to jcef_app.app/Contents folder for the Debug product. I get a similar error when I use the Release product but with the Release product I don't see as much error detail.

rm -fr "$mytop/Frameworks"
cp -pr "$jceftop/Frameworks" "$mytop"
cp -pr "$jceftop/Resources"/* "$mytop/Resources"
cp -pr "$jceftop/Java"/* "$mytop/Java"

Then I execute the abbreviated java command for my app so I can see the logging output on the console:

cd $mytop
java -Djava.library.path="$mytop/Java" -jar "$mytop/Java/my.jar"

Even if I reinstitute the precise java.library.path specified in the original Info.plist, I get the same error:

java -Djava.library.path="$mytop/Java/:$mytop/Frameworks/Chromium Embedded Framework.framework/Libraries" -jar "$mytop/Java/my.jar"

When I execute the AbstractAction that tries to create the objects I need (I got the code from MainFrame.java in the details tests), I see this error on the console output.

Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: REDACTED.app/Contents/Java/libjcef.dylib: dlopen(REDACTED.app/Contents/Java/libjcef.dylib, 1): Library not loaded: @rpath/Frameworks/Chromium Embedded Framework.framework/Chromium Embedded Framework
Referenced from: REDACTED.app/Contents/Java/libjcef.dylib
Reason: image not found
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at org.cef.CefApp.<init>(CefApp.java:144)
at org.cef.CefApp.getInstance(CefApp.java:213)
at org.cef.CefApp.getInstance(CefApp.java:200)
REDACTED

I thought it would be easy such that I just didn't have to file that was needed by ld.

$ pwd
REDACTED.app/Contents

$ ls -lg "Frameworks/Chromium Embedded Framework.framework/Chromium Embedded Framework"
-rwxr-xr-x 1 staff 152813380 Jul 31 14:08 Frameworks/Chromium Embedded Framework.framework/Chromium Embedded Framework

$ file "Frameworks/Chromium Embedded Framework.framework/Chromium Embedded Framework"
Frameworks/Chromium Embedded Framework.framework/Chromium Embedded Framework: Mach-O 64-bit dynamically linked shared library x86_64

$ otool -L ./Java/libjcef.dylib
./Java/libjcef.dylib:
@rpath/libjcef.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/Frameworks/Chromium Embedded Framework.framework/Chromium Embedded Framework (compatibility version 31775.13.68, current version 31775.13.68)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.50.4)
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 22.0.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1561.40.112)
@rpath/libjawt.dylib (compatibility version 1.0.0, current version 1.0.0)
@rpath/libjvm.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1452.23.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1452.23.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)

Here's what is in my app:

$ pwd
REDACTED.app/Contents

$ find . -type f # not showing directories
./MacOS/JavaAppLauncher
./Resources/de.lproj/Localizable.strings
./Resources/en.lproj/Localizable.strings
./Resources/CefIcon.icns
./Resources/fr.lproj/Localizable.strings
./Java/jcef.jar
./Java/libjcef.dylib
./Java/gluegen-rt-natives-macosx-universal.jar
./Java/jogl-all.jar
./Java/jcef-tests.jar
./Java/gluegen-rt.jar
./Java/jcef Helper.app/Contents/MacOS/jcef Helper
./Java/jcef Helper.app/Contents/Info.plist
./Java/jcef Helper.app/Contents/PkgInfo
./Java/jogl-all-natives-macosx-universal.jar
./Frameworks/Chromium Embedded Framework.framework/Resources/de.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/he.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/ar.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/el.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/ja.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/fa.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/mr.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/en.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/uk.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/v8_context_snapshot.bin
./Frameworks/Chromium Embedded Framework.framework/Resources/es_419.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/gu.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/zh_CN.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/kn.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/cef_extensions.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/nb.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/cef.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/am.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/es.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/sw.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/sl.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/pt_BR.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/da.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/et.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/it.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/bg.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/sk.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/pt_PT.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/icudtl.dat
./Frameworks/Chromium Embedded Framework.framework/Resources/cef_100_percent.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/sr.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/ms.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/ta.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/ml.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/sv.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/te.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/cef_200_percent.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/cs.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/ko.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/fil.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/snapshot_blob.bin
./Frameworks/Chromium Embedded Framework.framework/Resources/hu.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/tr.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/pl.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/zh_TW.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/en_GB.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/vi.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/natives_blob.bin
./Frameworks/Chromium Embedded Framework.framework/Resources/lv.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/lt.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/ru.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/fr.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/fi.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/id.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/nl.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/th.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/bn.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/ro.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/devtools_resources.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/Info.plist
./Frameworks/Chromium Embedded Framework.framework/Resources/hr.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/hi.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Resources/ca.lproj/locale.pak
./Frameworks/Chromium Embedded Framework.framework/Chromium Embedded Framework
./Frameworks/jcef Helper.app/Contents/MacOS/jcef Helper
./Frameworks/jcef Helper.app/Contents/Info.plist
./Frameworks/jcef Helper.app/Contents/PkgInfo
./Info.plist
./PkgInfo
jeff6times7
Newbie
 
Posts: 3
Joined: Tue Jul 31, 2018 2:36 pm

Re: macos java.lang.UnsatisfiedLinkError image not found

Postby magreenblatt » Tue Jul 31, 2018 4:23 pm

jeff6times7 wrote:$ otool -L ./Java/libjcef.dylib
./Java/libjcef.dylib:
@rpath/libjcef.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/Frameworks/Chromium Embedded Framework.framework/Chromium Embedded Framework (compatibility version 31775.13.68, current version 31775.13.68)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.50.4)
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 22.0.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1561.40.112)
@rpath/libjawt.dylib (compatibility version 1.0.0, current version 1.0.0)
@rpath/libjvm.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1452.23.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1452.23.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)

If you're not running via JavaAppLauncher (or similar exe inside the app bundle) then it's probably confused about the meaning of @rpath. See https://bitbucket.org/chromiumembedded/ ... t-35461901
magreenblatt
Site Admin
 
Posts: 12408
Joined: Fri May 29, 2009 6:57 pm

Re: macos java.lang.UnsatisfiedLinkError image not found

Postby jeff6times7 » Tue Jul 31, 2018 7:55 pm

You are correct. When I open the app or execute JavaAppLauncher (which I believe is nearly the same thing), then the browserUI displays. I'll read the page you cite and I'm sure things will go well. Much obliged.
jeff6times7
Newbie
 
Posts: 3
Joined: Tue Jul 31, 2018 2:36 pm


Return to JCEF Forum

Who is online

Users browsing this forum: No registered users and 28 guests