Skip to content

JNI shared library - wrong location hardcoded, breaks execution #6

@mouse07410

Description

@mouse07410

When libopensc-PKCS11-x86_64.dylib is linked - it somehow gets the idea that libltdl.dylib is in /usr/local/lib, while in fact it is in /opt/local/lib:

$ ant -f build-without-ivy.xml 
Buildfile: /Users/uri/src/opensc-java-andreas/build-without-ivy.xml

compile:
    [mkdir] Created dir: /Users/uri/src/opensc-java-andreas/build/bin
    [mkdir] Created dir: /Users/uri/src/opensc-java-andreas/java/lib
    [javac] /Users/uri/src/opensc-java-andreas/build-without-ivy.xml:32: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
    [javac] Compiling 38 source files to /Users/uri/src/opensc-java-andreas/build/bin
    [javac] Note: /Users/uri/src/opensc-java-andreas/java/src/org/opensc/pkcs11/spi/PKCS11SignatureSpi.java uses or overrides a deprecated API.
    [javac] Note: Recompile with -Xlint:deprecation for details.
    [javac] Note: /Users/uri/src/opensc-java-andreas/java/src/org/opensc/pkcs11/PKCS11Provider.java uses unchecked or unsafe operations.
    [javac] Note: Recompile with -Xlint:unchecked for details.

dist:
    [mkdir] Created dir: /Users/uri/src/opensc-java-andreas/build/lib
      [jar] Building jar: /Users/uri/src/opensc-java-andreas/build/lib/opensc-java.jar
     [copy] Copying 5 files to /Users/uri/src/opensc-java-andreas/build/lib
   [delete] Deleting directory /Users/uri/src/opensc-java-andreas/build/bin

BUILD SUCCESSFUL
Total time: 2 seconds
$ otool -L build/lib/libopensc-PKCS11-x86_64.dylib 
build/lib/libopensc-PKCS11-x86_64.dylib:
    libopensc-PKCS11-0.4.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/lib/libltdl.7.dylib (compatibility version 11.0.0, current version 11.1.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
$ ll /usr/local/lib/libltdl.7.dylib
ls: /usr/local/lib/libltdl.7.dylib: No such file or directory
$ otool -L /opt/local/lib/libltdl.7.dylib
/opt/local/lib/libltdl.7.dylib:
    /opt/local/lib/libltdl.7.dylib (compatibility version 11.0.0, current version 11.1.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
$

As a result, programs that try to use it fail:

/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/bin/java -Didea.launcher.port=7534 "-Didea.launcher.bin.path=/Applications/IntelliJ IDEA 14.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/tools.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Users/uri/SkyDrive/pkcs11Test/out/production/pkcs11Test:/Library/Java/Extensions/commons-logging-1.2.jar:/Library/Java/Extensions/opensc-java.jar:/Library/Java/Extensions/bcprov-ext-jdk15on-155.jar:/Library/Java/Extensions/junit-4.12.jar:/Applications/IntelliJ IDEA 14.app/Contents/lib/idea_rt.jar" com.intellij.rt.execution.application.AppMain burrow.pkcs11.PKCS11Test2
PKCS11Test2: setting up OpenSC-PKCS11 provider...
java.library.path = /Users/uri/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
Exception in thread "main" java.lang.UnsatisfiedLinkError: /Library/Java/Extensions/libopensc-PKCS11-x86_64.dylib: dlopen(/Library/Java/Extensions/libopensc-PKCS11-x86_64.dylib, 1): Library not loaded: /usr/local/lib/libltdl.7.dylib
  Referenced from: /Library/Java/Extensions/libopensc-PKCS11-x86_64.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:1837)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)
    at org.opensc.pkcs11.PKCS11Provider.<clinit>(Unknown Source)
    at burrow.pkcs11.PKCS11Test2.setProvider(PKCS11Test2.java:27)
    at burrow.pkcs11.PKCS11Test2.main(PKCS11Test2.java:108)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions