Я пытаюсь загрузить предварительно скомпилированную динамическую 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. Пожалуйста, помогите.