Я пытаюсь использовать библиотеку 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 в хост-системе? Сейчас я пытаюсь это сделать в течение недели и понятия не имею, как это преодолеть, поэтому вопрос здесь - это своего рода последнее средство.
Спасибо
Вы должны предоставить минимальный воспроизводимый пример с кодом C++ и Java - вам, вероятно, даже не нужно использовать спотовую библиотеку.




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