문제
나는 묶으려고 노력하고있다 dhcpctl JNA를 사용하여 Java에서 라이브러리. 이것은 MI 코드입니다 (아직 모든 기능을 선언하지는 않았습니다).
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 용도 오마피 원격 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__type__generic Omapi.h에 저장된 외부 변수입니다. 라이브러리를로드 할 때 일종의 연결을해야한다고 생각하지만 어떻게 해야할지 모르겠습니다.
많은 감사합니다.
해결책
omapi_type_generic
"OMAP.H에 저장된 외부 변수"가 아닙니다.
이 변수는 일부 .c 파일 어딘가에 정의되어야하므로 일부 .c 또는 .a에서는 정의되어야합니다.
.C 파일에 정의되지 않은 경우 바로 문제가 있습니다. 그것이 왜 그런지 알아보고 그것을 고치면이 예외를 극복해야합니다.
다른 팁
아마도 DHCPCTL 라이브러리가로드 될 때 시스템이 자동으로 찾을 수 있도록 OMAPI 라이브러리를 명시 적으로로드하거나 LD_LIBRARY_PATH에 있는지 확인해야합니다.
C ++ 코드를 작성하는 동안 Extern "C"를 잊어 버린 것 같습니다. 내 경우 C ++ 코드 :
#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 ;
}
}
및 Java 코드
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);
}
}
그것은 나를 위해 작동합니다
제휴하지 않습니다 StackOverflow