8

我用它来加载java程序中的dll库。显示错误。像这样的目录分隔符不应该出现在库名中:。

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

假设我只使用system.load()它可能会显示一种类型的错误。那是

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

并使用全名system.loadlibrary()。它可能会显示另一种类型错误。那是

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

所以我正在使用 mac 操作系统。请告诉我这个问题的解决方案。

4

2 回答 2

7

System.loadLibrary 仅接受文件名并在当前可用的 java 路径中查找文件。您需要将包含 FasExtend.dll 的目录添加到您的 java 路径中,然后使用

    System.loadLibrary("FasExtend")

与这篇文章类似:Java 本机库 System.loadLibrary failed with UnsatisfiedLinkError

于 2013-09-12T03:30:43.497 回答
0

尝试.so从应用程序的文档目录(而不是从应用程序包中)加载库时,我在 Android 上遇到了同样的问题。就我而言,调用以下方法有效:

System.load('/absolute/path/to/lib.so')
于 2020-08-24T21:21:26.103 回答