gmethvin/directory-watcher

LibCarbon failure on MacOS Big Sur

zhye9452 opened this issue ยท 12 comments

Play Version

2.8.2

API

Scala

Operating System

MacOS Big Sur Developer Beta Seed 1

JDK

JDK 11

Library Dependencies

Expected Behavior

  1. sbt run

Actual Behavior

  1. sbt run fails to run with below exception
[error] java.lang.UnsatisfiedLinkError: Unable to load library 'Carbon':
[error] dlopen(libCarbon.dylib, 9): image not found
[error] dlopen(libCarbon.dylib, 9): image not found
[error] 	at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:302)
[error] 	at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:455)
[error] 	at com.sun.jna.Library$Handler.<init>(Library.java:192)
[error] 	at com.sun.jna.Native.loadLibrary(Native.java:646)
[error] 	at com.sun.jna.Native.loadLibrary(Native.java:630)
[error] 	at io.methvin.watchservice.jna.CarbonAPI.<clinit>(CarbonAPI.java:20)
[error] 	at io.methvin.watchservice.jna.CFStringRef.toCFString(CFStringRef.java:23)
[error] 	at io.methvin.watchservice.MacOSXListeningWatchService.register(MacOSXListeningWatchService.java:128)
[error] 	at io.methvin.watchservice.WatchablePath.register(WatchablePath.java:50)
[error] 	at io.methvin.watcher.DirectoryWatcher.register(DirectoryWatcher.java:341)
[error] 	at io.methvin.watcher.DirectoryWatcher.registerAll(DirectoryWatcher.java:315)
[error] 	at io.methvin.watcher.DirectoryWatcher.<init>(DirectoryWatcher.java:176)
[error] 	at io.methvin.watcher.DirectoryWatcher$Builder.build(DirectoryWatcher.java:117)
[error] 	at play.dev.filewatch.DefaultFileWatchService.watch(DefaultFileWatchService.scala:38)
[error] 	at play.dev.filewatch.FileWatchService$$anon$1.watch(FileWatchService.scala:87)
[error] 	at play.runsupport.Reloader.<init>(Reloader.scala:443)
[error] 	at play.runsupport.Reloader$.reloader$lzycompute$1(Reloader.scala:283)
[error] 	at play.runsupport.Reloader$.play$runsupport$Reloader$$reloader$1(Reloader.scala:275)
[error] 	at play.runsupport.Reloader$.startDevMode(Reloader.scala:311)
[error] 	at play.sbt.run.PlayRun$.devModeServer$lzycompute$1(PlayRun.scala:98)
[error] 	at play.sbt.run.PlayRun$.devModeServer$1(PlayRun.scala:81)
[error] 	at play.sbt.run.PlayRun$.$anonfun$playRunTask$3(PlayRun.scala:105)
[error] 	at play.sbt.run.PlayRun$.$anonfun$playRunTask$3$adapted(PlayRun.scala:67)
[error] 	at scala.Function1.$anonfun$compose$1(Function1.scala:49)

Reproducible Test Case

msm commented

The underlying issue is with macOS 11's changes to how JNA can load dylibs:

java-native-access/jna#1216

@msm So should this be fixed by upgrading JNA?

msm commented

@gmethvin yes, once a new JNA release is made available (5.6?)

ok, thanks!

FYI, JNA 5.6.0 has been released.

I released directory-watcher 0.10.0 with the fix.

mkurz commented

@gmethvin I think you can close this issue now.

Still getting this error in directory-watcher 0.10.1 on Apple Silicon + Big Sur + sbt 1.4.9:
[error] java.lang.NoClassDefFoundError: Could not initialize class io.methvin.watchservice.jna.CarbonAPI [error] at io.methvin.watchservice.jna.CFStringRef.toCFString(CFStringRef.java:23) [error] at io.methvin.watchservice.MacOSXListeningWatchService.register(MacOSXListeningWatchService.java:127) [error] at io.methvin.watchservice.WatchablePath.register(WatchablePath.java:50) [error] at io.methvin.watcher.DirectoryWatcher.register(DirectoryWatcher.java:341) [error] at io.methvin.watcher.DirectoryWatcher.registerAll(DirectoryWatcher.java:315) [error] at io.methvin.watcher.DirectoryWatcher.<init>(DirectoryWatcher.java:176) [error] at io.methvin.watcher.DirectoryWatcher$Builder.build(DirectoryWatcher.java:117) [error] at play.dev.filewatch.DefaultFileWatchService.watch(DefaultFileWatchService.scala:41) [error] at play.dev.filewatch.FileWatchService$$anon$1.watch(FileWatchService.scala:90) [error] at play.runsupport.Reloader.<init>(Reloader.scala:443) [error] at play.runsupport.Reloader$.reloader$lzycompute$1(Reloader.scala:283) [error] at play.runsupport.Reloader$.play$runsupport$Reloader$$reloader$1(Reloader.scala:275) [error] at play.runsupport.Reloader$.startDevMode(Reloader.scala:306) [error] at play.sbt.run.PlayRun$.devModeServer$lzycompute$1(PlayRun.scala:98) [error] at play.sbt.run.PlayRun$.devModeServer$1(PlayRun.scala:81) [error] at play.sbt.run.PlayRun$.$anonfun$playRunTask$3(PlayRun.scala:105) [error] at play.sbt.run.PlayRun$.$anonfun$playRunTask$3$adapted(PlayRun.scala:67) [error] at scala.Function1.$anonfun$compose$1(Function1.scala:49)

mkurz commented

@dirspb you still get that error with directory watcher v0.15.0 and 1.6.2?

I am getting this error with sbt 1.5.6 and the dependency

"io.methvin" % "directory-watcher" % "0.15.0"

I have apple M1 chip and MacOS 12

mkurz commented

You need to upgrade to sbt 1.6.2

@mkurz thank you for the quick reply. Yes, it started working after upgrading to 1.6.2.