Как скомпилировать библиотеку C++ для Windows, чтобы использовать ее с Java JNA?

Я пытаюсь использовать библиотеку C++ Spot (https://gitlab.lrde.epita.fr/spot/spot) в проекте Java. Я хотел реализовать интерфейс между Java и C++ с помощью JNA (https://github.com/java-native-access/jna). Поскольку приложение Java также должно работать в Windows, я сначала попытался перекрестно скомпилировать библиотеку с помощью

./configure --host=x86_64-w64-mingw32 --disable-python LDFLAGS = "-static -static-libstdc++ -static-libgcc"

а затем, конечно, make / make install в системе Linux. Поскольку я не могу ожидать, что в системе Windows будет libstdC++ / libgcc, я хотел статически связать его с библиотекой. Моя проблема теперь заключается в следующем: когда я пытаюсь открыть скомпилированный .exe в Windows, он по-прежнему сообщает мне, что libstdC++ / libgcc не найден. Конечно, JNA также выдает мне исключение UnsatisfiedLinkException, когда я пытаюсь загрузить библиотеку в свою программу Java, потому что модули все еще не найдены, хотя я явно связал их статически.

Так что я делаю не так? Что еще я могу попытаться избежать установки libstdC++ / libgcc в хост-системе? Сейчас я пытаюсь это сделать в течение недели и понятия не имею, как это преодолеть, поэтому вопрос здесь - это своего рода последнее средство.

Спасибо

По моему опыту, источники такого рода проблем чрезвычайно трудно определить. Лучше всего сначала создать успешную компиляцию изначально. Если ваша основная ОС - Win, это должно быть очень легко сделать с помощью Подсистема Windows для Linux: нет необходимости перемещать исходные файлы, отличаются только зависимости.

Gotiasits 09.04.2021 13:16

Вы должны предоставить минимальный воспроизводимый пример с кодом C++ и Java - вам, вероятно, даже не нужно использовать спотовую библиотеку.

Frant 09.04.2021 19:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
17
0

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