ho bisogno del vostro aiuto.
Sto cercando di richiamare i metodi della libreria open62541 scritta in C da un programma Java su Windows.
Open62541 è un implementazione open source del protocollo OPC UA.
Vorrei ad esempio aprire una connessione verso il server e leggere una variabile:
utilizzando le API org.graalvm.nativeimage di GraalVM come descritto in questo articolo:
Non sono ancora riuscito a creare il progetto Java.
Di seguito vi riporto i miei passi per ottenere il file open62541.c:
- Ho scaricato i sorgenti di open62541:
git clone
https://github.com/open62541/open62541.git- Ho installato Visual Studio Comunity 2022
- Ho installato l'ambiente di sviluppo C / C++
- Ho aggiunto il programma cmake alla variabile d'ambiente PATH:
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin
- Ho installato Python 3.11 (utilizzato dal progetto cmake di open62541)
Ho creato il progetto Visual Studio:
https://www.open62541.org/doc/0.3/building.htmlmkdir build
cmake .. -DUA_ENABLE_AMALGAMATION=true
- Ho compilato da Visual Studio la solution build/open62541.sln per ottenere i seguenti file:
open62541.h
open62541.c
Da questo punto in poi ho preparato l'ambiente per GrallVM:
- Ho scaricato GraalVM Community Edition 22.3.1:
graalvm-ce-java11-windows-amd64-22.3.1.zip
- Ho installato i pacchetti:
graalvm-ce-java11-22.3.1\bin\gu install llvm
graalvm-ce-java11-22.3.1\bin\gu install llvm-toolchain
graalvm-ce-java11-22.3.1\bin\gu install native-image
- Ho compilato open62541.c con il seguente comando:
graalvm-ce-java11-22.3.1\lib\llvm\bin\clang -shared -o open62541.so open62541.c "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22000.0\um\x64\WS2_32.lib" "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22000.0\um\x64\iphlpapi.lib"
Ho dovuto aggiungere WS2_32.lib e iphlpapi.lib per riuscire a compilare.
A questo punto dovrei creare il progetto Java ed invocare i metodi della libreria open62541.so, ma non ho capito come utilizzare le API.
Ogni volta che richiamo un metodo ottengo:
Exception in thread "main" java.lang.UnsatisfiedLinkError ...
Stavo leggendo questo articoli:
https://stackoverflow.com/questions/62792151/java-call-c-library-using-native-image-from-graalvmhttps://www.graalvm.org/sdk/javadoc/index.html?org/graalvm/nativeimage/c/package-summary.htmlhttps://www.praj.in/posts/2020/opengl-demo-using-graalvm/Ma sono molto confuso.
Vi ringrazio per l'aiuto.
Francesco.