JNI를 사용하여 호스트 바이너리에서 C 함수 호출

엘 로프

JVM을 호스팅하는 실행 파일에서 JNI C 함수를 호출하려고합니다. -rdynamic으로 컴파일하고 nm -D로 기호가 동적 기호 테이블에 내보내 졌음을 확인했습니다. 그러나 내가 그것을 부를 때 JVM은 기호를 찾을 수 없다고 불평합니다.

나는 과거에 LuaJIT로 이것을 해왔고 그것은 다소 사소한 일이었고 Java로 할 수 없다면 꽤 놀랐을 것입니다.

JNITest 클래스에서 테스트 메서드를 만들었습니다.

public static native int strLen();

그리고 구현 :

#include <jni.h>
#include <java/com_jnitest_JNITest.h>

#include <string>
#include <iostream>

JNIEXPORT jint JNICALL Java_com_jnitest_JNITest_strLen(JNIEnv* env, jclass clazz)
{
    return 1111;
}

int main()
{
    JNIEnv* env;
    JavaVM* jvm;

    JavaVMInitArgs args;
    JavaVMOption options[1];
    args.version = JNI_VERSION_1_8;
    args.nOptions = 1;
    args.options = options;
    args.ignoreUnrecognized = false;

    std::string classpath = "-Djava.class.path=";
    classpath += "/var/projects/jnitest/src/java";
    options[0].optionString = (char*)classpath.c_str();

    jint result = JNI_CreateJavaVM(&jvm, (void**)&env, &args);
    if (result != JNI_OK) {
        std::cerr << "Could not create JVM" << std::endl;
        return 1;
    }

    jclass main_class = env->FindClass("com/jnitest/JNITest");
    if (main_class == nullptr) {
        std::cerr << "Could not find JNITest class" << std::endl;
        return 1;
    }

    jmethodID main_method = env->GetStaticMethodID(main_class, "main", "()V");

    // Call JNITest.main() transferring control to Java
    env->CallStaticVoidMethod(main_class, main_method, nullptr);

    if(env->ExceptionCheck()) {
        env->ExceptionDescribe();
        return 1;
    }

    jvm->DestroyJavaVM();

    return 0;
}
AleX

JVM은 System.loadLibrary ()로 로드 된 경우 공유 라이브러리 내부의 모든 함수 만 등록합니다 .

프로그램 내부에 JVM을 만들었 으므로이 함수에 대해 알지 못하므로 env-> RegisterNatives (...) 를 사용하여 네이티브 메서드를 Java 클래스와 연결할 수 있습니다.

또한 JNIEXPORT함수 포인터로 등록하고 외부에서 접근 할 수 있도록 할 필요가 없기 때문에 필요하지 않습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

JNI를 사용하여 Java에서 호출되는 C ++ 함수에서 새 JVM을 만들 수 있습니까?

분류에서Dev

Jasmine 스파이를 사용하여 함수 호출 테스트

분류에서Dev

자바 스크립트를 사용하여 PHP 함수 호출

분류에서Dev

자바 스크립트를 사용하여 PHP 함수 호출

분류에서Dev

PHP를 사용하여 자바 스크립트 함수 호출

분류에서Dev

여러 스레드를 사용하여 C ++에서 Java를 호출하는 JNI

분류에서Dev

LuaBridge를 사용하여 C ++에서 Lua 함수 호출

분류에서Dev

F #에서 여러 인수를 사용하여 C # 함수 호출

분류에서Dev

Rcpp를 사용하여 C ++에서 사용자 정의 R 함수 호출

분류에서Dev

C # 앱에서 void * 매개 변수를 사용하여 C ++ 함수 호출

분류에서Dev

변수를 사용하여 bash 스크립트에서 특정 함수 호출

분류에서Dev

인수를 사용하여 TCL 스크립트에서 Python 함수 호출

분류에서Dev

도트 연산자를 사용하여 자바 스크립트 함수 호출

분류에서Dev

자바 스크립트 아약스를 사용하여 PHP 함수 호출

분류에서Dev

자바 스크립트 아약스를 사용하여 PHP 함수 호출

분류에서Dev

자바 스크립트를 사용하여 PHP 클래스 함수 호출

분류에서Dev

지도에서 매개 변수를 사용하여 C ++ 함수 호출

분류에서Dev

JNI를 사용하여 JAVA에서 C ++의 인수로 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

c #을 사용하여 asp.net에서 페이지로드시 자바 스크립트 함수 호출

분류에서Dev

자바 스크립트 전역 변수를 사용하여 다른 함수 내에서 함수 호출

분류에서Dev

tk 텍스트 위젯에서 bind를 사용하여 함수 호출

분류에서Dev

함수 이름에 변수를 사용하여 함수 호출

분류에서Dev

스택 대신 레지스터를 사용하여 x64 어셈블리에서 C 함수 호출

분류에서Dev

FILE * 매개 변수를 사용하여 C # 호출 C 함수

분류에서Dev

C API에서 * args 및 ** kwargs를 사용하여 Python 함수 호출

분류에서Dev

웹 서비스 PHP 함수를 호출하기 위해 $ .post를 사용하여 자바 스크립트 페이지에서 디렉토리 유효성 검사

분류에서Dev

C에서 함수 포인터를 사용하여 고차 함수 합성 함수 정의 및 호출

분류에서Dev

ac 함수에서 performSelector를 사용하여 대리자 호출

분류에서Dev

onClick 이벤트를 사용하여 호출 된 주요 JS 함수에서 호출되지 않는 함수

Related 관련 기사

  1. 1

    JNI를 사용하여 Java에서 호출되는 C ++ 함수에서 새 JVM을 만들 수 있습니까?

  2. 2

    Jasmine 스파이를 사용하여 함수 호출 테스트

  3. 3

    자바 스크립트를 사용하여 PHP 함수 호출

  4. 4

    자바 스크립트를 사용하여 PHP 함수 호출

  5. 5

    PHP를 사용하여 자바 스크립트 함수 호출

  6. 6

    여러 스레드를 사용하여 C ++에서 Java를 호출하는 JNI

  7. 7

    LuaBridge를 사용하여 C ++에서 Lua 함수 호출

  8. 8

    F #에서 여러 인수를 사용하여 C # 함수 호출

  9. 9

    Rcpp를 사용하여 C ++에서 사용자 정의 R 함수 호출

  10. 10

    C # 앱에서 void * 매개 변수를 사용하여 C ++ 함수 호출

  11. 11

    변수를 사용하여 bash 스크립트에서 특정 함수 호출

  12. 12

    인수를 사용하여 TCL 스크립트에서 Python 함수 호출

  13. 13

    도트 연산자를 사용하여 자바 스크립트 함수 호출

  14. 14

    자바 스크립트 아약스를 사용하여 PHP 함수 호출

  15. 15

    자바 스크립트 아약스를 사용하여 PHP 함수 호출

  16. 16

    자바 스크립트를 사용하여 PHP 클래스 함수 호출

  17. 17

    지도에서 매개 변수를 사용하여 C ++ 함수 호출

  18. 18

    JNI를 사용하여 JAVA에서 C ++의 인수로 함수를 호출하는 방법은 무엇입니까?

  19. 19

    c #을 사용하여 asp.net에서 페이지로드시 자바 스크립트 함수 호출

  20. 20

    자바 스크립트 전역 변수를 사용하여 다른 함수 내에서 함수 호출

  21. 21

    tk 텍스트 위젯에서 bind를 사용하여 함수 호출

  22. 22

    함수 이름에 변수를 사용하여 함수 호출

  23. 23

    스택 대신 레지스터를 사용하여 x64 어셈블리에서 C 함수 호출

  24. 24

    FILE * 매개 변수를 사용하여 C # 호출 C 함수

  25. 25

    C API에서 * args 및 ** kwargs를 사용하여 Python 함수 호출

  26. 26

    웹 서비스 PHP 함수를 호출하기 위해 $ .post를 사용하여 자바 스크립트 페이지에서 디렉토리 유효성 검사

  27. 27

    C에서 함수 포인터를 사용하여 고차 함수 합성 함수 정의 및 호출

  28. 28

    ac 함수에서 performSelector를 사용하여 대리자 호출

  29. 29

    onClick 이벤트를 사용하여 호출 된 주요 JS 함수에서 호출되지 않는 함수

뜨겁다태그

보관