目录分隔符不应出现在库名称中:Macintosh HD / Users / sakkisetty / Documents / dll / FasExtend.dll

时间:2013-04-02 07:02:36

标签: java

我用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 OS。请告诉我这个问题的解决方案。

2 个答案:

答案 0 :(得分:5)

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

    System.loadLibrary("FasExtend")

与此帖类似:Java native library System.loadLibrary fails with UnsatisfiedLinkError

答案 1 :(得分:0)

当我尝试从应用程序的文档目录(而不是从应用程序捆绑包中)加载.so库时,在Android上遇到了相同的问题。在我的情况下,调用以下命令有效:

System.load('/absolute/path/to/lib.so')