8

I use to load the dll library in java program it . show the error. like this Directory separator should not appear in library name:.

import java.sql.*;
/*
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.Platform;
import com.sun.jna.*;*/

public class jdbc3
{
     public native void FasSendUserFromFasToFac();

    static
    {
        System.loadLibrary("Macintosh HD/Users/sakkisetty/Documents/dll/FasExtend");
    }

  /*  public interface simpleDLL extends Library
        {
            simpleDLL INSTANCE = (simpleDLL) Native.loadLibrary((Platform.isWindows() ? "simpleDLL" : "simpleDLLLinuxPort"), simpleDLL.class);

    byte giveVoidPtrGetChar(Pointer param); // char giveVoidPtrGetChar(void* param);
    int giveVoidPtrGetInt(Pointer param);   //int giveVoidPtrGetInt(void* param);
    int giveIntGetInt(int a);               // int giveIntGetInt(int a);
    void simpleCall();

        }*/


    // JDBC driver name and database URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DB_URL = "jdbc:mysql://localhost:3306/somesh";

    //  Database credentials
    static final String USER = "root";
    static final String PASS = "";

    public static void main(String[] args)
    {

              jdbc3 jb=new jdbc3();
        jb.FasSendUserFromFasToFac();

        Connection conn = null;
        Statement stmt = null;
        try{
            //STEP 2: Register JDBC driver
            Class.forName("com.mysql.jdbc.Driver");

            //STEP 3: Open a connection
            // System.out.println("Connecting to database...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
            System.out.println("Connecting to database...");
            //STEP 4: Execute a query
            System.out.println("Creating statement...");
            stmt = conn.createStatement();
            String sql;
            sql = " select id,image from images1 ";
            ResultSet rs  = stmt.executeQuery(sql);

            //STEP 5: Extract data from result set
            while(rs.next())
            {
                //Retrieve by column name
                System.out.println("\n");
                int no = rs.getInt("id");
                System.out.print("\t USER_I_ID: " +no);
                /*String std_name = rs.getString("name");
                 System.out.print(" \t First_name : " + std_name);
                 String std_course = rs.getString("course");
                 System.out.print(" \t course : " + std_course);*/
                Blob std_image = rs.getBlob("image");
                System.out.print(" \t std_images : SS" + std_image);
            }
        }

        catch(SQLException se)
        {
            //Handle errors for JDBC
            se.printStackTrace();
        }catch(Exception e)
        {
            //Handle errors for Class.forName
            e.printStackTrace();
        }finally
        {
            //finally block used to close resources
            try{
                if(stmt!=null)
                    stmt.close();
            }catch(SQLException se2){
            }// nothing we can do
            try{
                if(conn!=null)
                    conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }//end catch try

        }//end finally

    }//end main
}//end FirstExample

suppose i use the only system.load() it may show one type error . that is

Expecting an absolute path of the library: Macintosh HD/Users/sakkisetty/Documents/dll/FasExtend.dll

and use the full name system.loadlibrary() . it may show another type error. that is

Exception in thread "main" java.lang.UnsatisfiedLinkError: 
   Directory separator should not appear in library name: 
      Macintosh HD/Users/sakkisetty/Documents/dll/FasExtend.dll

so i am using mac OS. please tell me solution for this problem.

somesh
  • 81
  • 1
  • 1
  • 4

2 Answers2

8

System.loadLibrary only accepts a filename and looks for the file in the current java paths available. You'll want to add the directory containing FasExtend.dll to your java path, then just use

    System.loadLibrary("FasExtend")

Similar to this post: Java native library System.loadLibrary fails with UnsatisfiedLinkError

Community
  • 1
  • 1
rdmcfee
  • 540
  • 6
  • 13
  • Right. Two remakrs: 1) For absolute paths System.load() can be used. 2) The issue is OS-dependent. For example on AIX System.loadLibrary() also works with absolute paths in distinct to other operating systems. – Alexander Samoylov Feb 15 '23 at 12:28
1

I experienced the same issue on Android when trying to load a .so library from the application's documents directory (rather than from within the app bundle). In my case calling the following worked:

System.load('/absolute/path/to/lib.so')
Bulwinkel
  • 2,111
  • 25
  • 23