Невозможно взаимодействовать с общими объектами (файлами .so) с помощью JavaCPP - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь загрузить предварительно скомпилированную динамическую c библиотеку (libab c .so) , которая содержит внешние функции, объявленные в заголовке и cpp файлах. Но во время компиляции возникает ошибка.

Заголовок и CPP файл выглядят следующим образом:

[export.h]

extern "C" {
void multiply(int a, float b);
}

[экспорт. cpp]

#include "export.h"
#include <iostream>
using namespace std;
extern "C" {
void multiply (int a, float b) {
cout << "Hello-World\n";
}
}

Я скомпилировал их в общий объект: libab c .so и скопировал его в src / main / java / somepackage / *. (Я использую пример демонстрации, приведенный здесь: https://github.com/bytedeco/sample-projects/blob/master/javacpp-mvn-simple-demo/)

Я пытаюсь загрузить библиотеку из Java и вызвать методы, как показано ниже:

package somepackage;

import org.bytedeco.javacpp.;
import org.bytedeco.javacpp.annotation.;

@Platform(library="abc")
public class MultiplyDemo {

static {
    Loader.load();
}

public native void multiply(int a, float b);

public static void main(String[] args) {

MultiplyDemo mul = new MultiplyDemo();
    mul.multiply(123, 100f);
}    
}

Я получаю сообщение об ошибке:

[INFO] --- javacpp:1.0:build (process-classes) @ javacpp-mvn-simple-demo ---
[INFO] Executing JavaCPP Builder
[INFO] Generating /home/necuser/nitin/bridge/javacpp-mvn-simple-demo/target/classes/somepackage/jniMultiplyDemo.cpp
[WARNING] The class somepackage.MultiplyDemo does not map to any C++ type. Compilation will most likely fail.
[WARNING] The class somepackage.MultiplyDemo does not map to any C++ type. Compilation will most likely fail.
[WARNING] The class somepackage.MultiplyDemo does not map to any C++ type. Compilation will most likely fail.
[WARNING] The class somepackage.MultiplyDemo does not map to any C++ type. Compilation will most likely fail.
[INFO] Compiling /home/necuser/nitin/bridge/javacpp-mvn-simple-demo/target/classes/somepackage/linux-x86_64/libjniMultiplyDemo.so
[INFO] g++ -I/home/necuser/nitin/bridge/javacpp-mvn-simple-demo/src/main/java -I/usr/lib/jvm/java-8-openjdk-amd64/include -I/usr/lib/jvm/java-8-openjdk-amd64/include/linux /home/necuser/nitin/bridge/javacpp-mvn-simple-demo/target/classes/somepackage/jniMultiplyDemo.cpp -Wl,-rpath,$ORIGIN/ -march=x86-64 -m64 -Wall -O3 -fPIC -shared -s -o /home/necuser/nitin/bridge/javacpp-mvn-simple-demo/target/classes/somepackage/linux-x86_64/libjniMultiplyDemo.so
/home/necuser/nitin/bridge/javacpp-mvn-simple-demo/target/classes/somepackage/jniMultiplyDemo.cpp: In function ‘void Java_somepackage_MultiplyDemo_add_1Conv(JNIEnv*, jobject, jint, jfloat)’:
/home/necuser/nitin/bridge/javacpp-mvn-simple-demo/target/classes/somepackage/jniMultiplyDemo.cpp:1054:6: error: ‘ptr’ was not declared in this scope
ptr = ()jlong_to_ptr(env->GetLongField(obj, JavaCPP_addressFID));
^~~
/home/necuser/nitin/bridge/javacpp-mvn-simple-demo/target/classes/somepackage/jniMultiplyDemo.cpp:1054:13: error: expected primary-expression before ‘)’ token
ptr = ()jlong_to_ptr(env->GetLongField(obj, JavaCPP_addressFID));

Я новичок в JavaCPP. Пожалуйста, помогите.

...