javac "no source files" when using -h option
In Java 8, you had to make intermediate step of generating class files to get C headers
Lets say you have following structure
recipeNo001
├── Makefile
├── README.md
├── c
│ └── recipeNo001_HelloWorld.c
├── java
│ └── recipeNo001
│ └── HelloWorld.java
├── lib
└── target
In Java (prior to JDK 9) you had to compile class and use javah with compiled sources
> export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0_11)
> ${JAVA_HOME}/bin/javac -d target java/recipeNo001/*.java
> ${JAVA_HOME}/bin/javah -d c -cp target recipeNo001.HelloWorld
# -d c -> put generated codes inside c directory
# -cp target -> compiled classes are inside target dir
In Java 9 you can use javac -h
with Java source code
> export JAVA_HOME=$(/usr/libexec/java_home -v 9)
> ${JAVA_HOME}/bin/javac -h c java/recipeNo001/HelloWorld.java
# -h c -> create header file inside c directory
The solution I discovered was that I was not specifying the directory where javac
should place the header files.
Executing javac -h . NativeTest.java
worked.