2017-12-22 28 views
1

私ははnixos

次の例外になり
#!/usr/bin/env groovy 

@Grapes(
    @Grab(group='net.java.dev.jna', module='jna-platform', version='4.5.0') 
) 

import com.sun.jna.platform.unix.X11 

def display = X11.INSTANCE.XOpenDisplay(null) 
if(display == null) { 
    throw new IllegalStateException('Can\'t open default display') 
} 
def root = X11.INSTANCE.XRootWindow(display, X11.INSTANCE.XDefaultScreen(display)) 
if(root == null) { 
    throw new IllegalStateException('Can\'t find root window') 
} 


if(display != null) { 
    X11.INSTANCE.XCloseDisplay(display) 
} 

Caught: java.lang.UnsatisfiedLinkError: Unable to load library 'X11': Native library (linux-x86-64/libX11.so) not found in resource path ([file:/etc/user/john/.groovy/grapes/net.java.dev.jna/jna-platform/jars/jna-platform-4.5.0.jar, file:/etc/user/john/.groovy/grapes/net.java.dev.jna/jna/jars/jna-4.5.0.jar]) java.lang.UnsatisfiedLinkError: Unable to load library 'X11': Native library (linux-x86-64/libX11.so) not found in resource path ([file:/etc/user/john/.groovy/grapes/net.java.dev.jna/jna-platform/jars/jna-platform-4.5.0.jar, file:/etc/user/john/.groovy/grapes/net.java.dev.jna/jna/jars/jna-4.5.0.jar]) 
     at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:303) 
     at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:427) 
     at com.sun.jna.Library$Handler.<init>(Library.java:179) 
     at com.sun.jna.Native.loadLibrary(Native.java:569) 
     at com.sun.jna.Native.loadLibrary(Native.java:544) 
     at com.sun.jna.platform.unix.X11.<clinit>(X11.java:417) 
     at helloX11.run(helloX11:10) 

私はセットアップnixos上のJVMがどのようにポイントすることができますnixosからこのグルーヴィーなスクリプトを実行しようとしている上でのGroovyスクリプトを実行することはできませんlibX11.soに正しく?

答えて

1

これは、X11で設定されているはずのJVMでも発生します。ネイティブライブラリはCLASSPATHを介して伝播していないようです。これはおそらくNixPkgsで修正されるべきです。一方で、次のようにしてnix-shellを使ってネイティブパッケージを利用できるようにすることができます。

nix-shell -E 'with import <nixpkgs> { }; runCommand "dummy" { buildInputs = [ groovy ]; shellHook = "export CLASSPATH=${xlibs.libX11.out}/lib"; } ""' --run ./x11script.groovy 

runCommandの呼び出しによって、ここで生成されるようnix-shell -Eはダミー派生からの属性を使用しています)

、それはあなたのためのオプションだ場合、あなたはdeps.nixというファイルにダミーの導出を入れてhashbangを変更することができますあなたのスクリプトの最初の行。スクリプトの

with import <nixpkgs> { }; 
runCommand "dummy" { 
    buildInputs = [ groovy ]; 
    shellHook = "export CLASSPATH=${xlibs.libX11.out}/lib"; 
} "" 

トップ:

#!/usr/bin/env nix-shell 
/* 
#!nix-shell -i groovy 
#!nix-shell deps.nix 
*/ 

今、あなたはコマンドラインで手動nix-shellを起動せずにスクリプトを呼び出すことができます。

NixPkgsのセットアップフックメカニズムを使用すると、より良い解決策が可能になるかもしれませんが、悲しいことに、今お手伝いできるものではありません。

関連する問題