AMD/NVIDIAデバイスについては未検証です。
JNAの一連のビルドは以下のようになります。
Makefile.
CLASS_PATH = ../target/classes CFLAG = PROC = $(strip $(shell uname -m | grep 64)) OS = $(shell uname -s 2>/dev/null | tr [:lower:] [:upper:]) MACOS = $(strip $(findstring DARWIN, $(OS))) ifneq ($(MACOS),) TARGET= libhello.dylib CFLAG += -dynamiclib FRAMEWORK = -framework OpenCL #else # #TARGET= libhello.so #CFLAG += -fPIC -shared #FRAMEWORK = -lOpenCL endif #ifdef AMDAPPSDKROOT # #INC = -I$(AMDAPPSDKROOT)/include #ifeq ($(PROC),) # LIB = -L$(AMDAPPSDKROOT)/lib/x86 #else # LIB = -L$(AMDAPPSDKROOT)/lib/x86_64 #endif # #else # #ifdef NVSDKCOMPUTE_ROOT # INC = -I$(NVSDKCOMPUTE_ROOT)/OpenCL/common/inc #endif # #endif all : $(TARGET) mv $(TARGET) $(CLASS_PATH)/ $(TARGET) : HelloJNA.o gcc $(CFLAG) -o $@ $< $(INC) $(LIB) $(FRAMEWORK) HelloJNA.o : HelloJNA.c gcc -O0 -g3 -Wall -c $< -o $@ clean : rm HelloJNA.o $(CLASS_PATH)/libhello.dylib
出力.
$ make gcc -O0 -g3 -Wall -c HelloJNA.c -o HelloJNA.o gcc -dynamiclib -o libhello.dylib HelloJNA.o -framework OpenCL mv libhello.dylib ../target/classes/
このサンプルコードでは「exec-maven-plugin」を使うことにします。
pom.xml.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.book.jna</groupId> <artifactId>HelloJNA</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>4.2.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <configuration> <mainClass>com.book.jocl.HelloJNA</mainClass> </configuration> </plugin> </plugins> </build> </project>
実行と出力.
$ mvn2 compile $ mvn2 package $ mvn2 exec:java CL_DEVICE_NAME: Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz CL_DEVICE_NAME: HD Graphics 4000 checkDevice function returns: HD Graphics 4000 25 14 Hello World! JNA! I'm from C language!
正しく出力されたのでJNAの正常な動作が確認できました。
Copyright 2018-2019, by Masaki Komatsu