سؤال

أحاول ربط dhcpctl مكتبة جافا باستخدام الجيش الشعبي اليوغوسلافي.هذا هو مي رمز (لم تعلن عن وظائف حتى الآن):

package com.abiquo.abicloud.omapi;

import com.abiquo.abicloud.omapi.DHCPControlStructure.DHCPCtrlDataString;
import com.abiquo.abicloud.omapi.DHCPControlStructure.DHCPHandle;
import com.abiquo.abicloud.omapi.OmapiControlStructure.OmapiObjectTypeT;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;

/**
 * Binding of the dhcpctl header. 
 * @author jdevesa@abiquo.com
 */
public interface DHCPControlLibrary extends Library
{
    /**
     * Create the loaded instance of the native library
     */
    DHCPControlLibrary INSTANCE =
        (DHCPControlLibrary) Native.loadLibrary("dhcpctl", DHCPControlLibrary.class);

    /**
     * Define as synchronized
     */
    DHCPControlLibrary SYNC_INSTANCE=(DHCPControlLibrary)                              Native.synchronizedLibrary(INSTANCE);

    int dhcpctl_initialize ();
    int dhcpctl_connect (DHCPHandle handle1, String address, int port, DHCPHandle.ByValue handle2);
    int dhcpctl_wait_for_completion (DHCPHandle handle, Pointer int1);
    int dhcpctl_get_value (DHCPCtrlDataString dataString , DHCPHandle.ByValue handleValue, String str1);
    int dhcpctl_get_boolean (Pointer int1, DHCPHandle.ByValue handleValue, String str1);
    int dhcpctl_set_value (DHCPHandle.ByValue handleValue, DHCPCtrlDataString dataString, String str1);
    ... etc ...

}

dhcpctl يستخدم omapi مكتبة نداء البعيد ملقم DHCP.لذا ، عندما أحاول تحميل المكتبة:

DHCPControlLibrary dhcpExecutor = DHCPControlLibrary.INSTANCE; 

فإنه يلقي الخطأ التالية:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'dhcpctl': /usr/lib/libdhcpctl.so: undefined symbol: omapi_type_generic
    at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:160)
    at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:228)
    at com.sun.jna.Library$Handler.<init>(Library.java:140)
    at com.sun.jna.Native.loadLibrary(Native.java:372)
    at com.sun.jna.Native.loadLibrary(Native.java:357)
    at com.abiquo.abicloud.omapi.DHCPControlLibrary.<clinit>(DHCPControlLibrary.java:40)
    at com.abiquo.abicloud.omapi.DHCPexecution.main(DHCPexecution.java:11)

omapi__النوع__generic هو متغير خارجي المخزنة في omapi.ح.أعتقد أنني يجب أن تفعل نوعا من الربط عندما كنت تحميل المكتبة, ولكن أنا لا أعرف كيف نفعل ذلك.

شكرا جزيلا.

هل كانت مفيدة؟

المحلول

omapi_type_generic ليست "متغير خارجي المخزنة في omap.ساعة".

هذا المتغير يجب أن تكون محددة في بعض .ج الملف في مكان ما ومن ثم في بعض .إذا أو .أ.

إذا كان لا يعرف في أي .ج الملف ثم هناك المشكلة الخاصة بك هناك.معرفة السبب في ذلك و اصلاحه و يجب عليك التغلب على هذا الاستثناء.

نصائح أخرى

على الأرجح سوف تحتاج إلى إما صراحة تحميل omapi المكتبة أو ضمان LD_LIBRARY_PATH بحيث يمكن للنظام العثور على تلقائيا عندما dhcpctl مكتبة تحميل.

أعتقد u ننسى extern "C" أثناء كتابة رمز c++.في حالتي c++ code:

    #include <stdlib.h>  
    #include <iostream>  
    using namespace std;  
    extern "C"  
    {  
        void test() {  
             cout << "TEST" << endl;  
        }  

        int addTest(int a,int b)  
        {  
          int c = a + b ;  
          return c ;  
        }   
    }  

و كود جافا

    import com.sun.jna.Library;  
    import com.sun.jna.Native;  

    public class jnatest1 {  

        public interface Clibrary extends Library {  
            Clibrary INSTANTCE = (Clibrary) Native.loadLibrary("hello",  
                    Clibrary.class);  

            void test();  
            int addTest(int a,int b);    
        }  

        public static void main(String[] args) {  
            Clibrary.INSTANTCE.test();  
            int c = Clibrary.INSTANTCE.addTest(10,20);    
            System.out.println(c);   
        }  
    }  

يعمل بالنسبة لي

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top