Не удается найти библиотеки в панаме проекта на macOs

Я пытаюсь запустить код cpp через Java, используя Project Panama, и получаю сообщение об ошибке, потому что моя библиотека не загружается.

СРР-код:

      // MyRectangle.cpp
#include <iostream>
#include <cstring>

class Rectangle {
    int width, height;
  public:
    Rectangle(int, int);
    int area() {return width*height;}
};

Rectangle::Rectangle(int w, int h) {
  this->width = w;
  this->height = h;
}

// Expose C ABI for Panama to call into.
extern "C" int rectArea(int, int);
int rectArea(int w, int h) {
    std::cout << "Inside C++ Code " << std::endl;
    Rectangle rect(w,h);
    return rect.area();
}

Я компилирую так: g++ -dynamiclib -current_version 1.0 -o libmyrectangle.dylib MyRectangle.cpp

и Java-код:

      class MyRectangle {
    public static void main(String[] args) throws Throwable {
        System.loadLibrary("myrectangle");


        var cLinker = CLinker.systemCLinker();


// C function int rectArea(int w, int h)
        MethodHandle rectAreaMH = cLinker.downcallHandle(cLinker.lookup("rectArea").get(),
                FunctionDescriptor.of(ValueLayout.OfInt.JAVA_INT, ValueLayout.OfInt.JAVA_INT, ValueLayout.OfInt.JAVA_INT));

// Return area of rectangle
        int w = 8;
        int h = 2;
        int area = (int) rectAreaMH.invokeExact(w, h);

        System.out.printf("MethodHandle calling rectArea(%d, %d) = (%d)\n", w, h, area);
    }
}

и я получил ошибку: Исключение в потоке "основной" java.lang.UnsatisfiedLinkError: нет myrectangle в java.library.path: ~/Users/project-panama-examples

Кажется, что java не видит мою библиотеку, но почему? Это ошибка?

1 ответ

Панама пока не совместима сarm64, то есть M1 MacBook. Я предполагаю, что ваш один из тех?

Вы по-прежнему можете запускать свой код внутри контейнера докеров с архитектурой x86_64. Для собственных экспериментов я собрал этот dockerfile.

Другие вопросы по тегам