2017-12-22 6 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에서이 그루비 스크립트를 실행하기 위해 노력하고있어에서 그루비 스크립트를 실행할 수 없습니다 libX11.so에 올바르게?

답변

1

이것은 또한 X11로 구성되어야하는 JVM에서 발생합니다. 네이티브 라이브러리는 CLASSPATH을 통해 전파되지 않는 것으로 보입니다. 이것은 아마도 NixPkg에서 수정되어야합니다. 한편 다음 패키지를 사용하여 nix-shell을 사용하여 기본 패키지를 제공 할 수 있습니다.

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

당신을위한 옵션의 경우

(nix-shell -ErunCommand의 호출에 의해 여기에 제조 된 더미 유도에서 속성을 사용), 당신은 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의 설정 후크 메커니즘을 사용하는 것이 가능할 수도 있지만 슬프게도 내가 지금 당신을 도울 수있는 것이 아닙니다.