." Copyright 2002-2006 Sun Microsystems, Inc.  All Rights Reserved.
." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
."
." This code is free software; you can redistribute it and/or modify it
." under the terms of the GNU General Public License version 2 only, as
." published by the Free Software Foundation.
."
." This code is distributed in the hope that it will be useful, but WITHOUT
." ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
." FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
." version 2 for more details (a copy is included in the LICENSE file that
." accompanied this code).
."
." You should have received a copy of the GNU General Public License version
." 2 along with this work; if not, write to the Free Software Foundation,
." Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
."
." Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
." or visit www.oracle.com if you need additional information or have any
." questions.
."
.TH javah 1 "04 May 2009"
." Generated from HTML by html2man (author: Eric Armstrong)

.LP
.SH "Name"
javah \- C Header and Stub File Generator
.LP
.RS 3

.LP
.LP
\f3javah\fP produces C header files and C source files from a Java class. These files provide the connective glue that allow your Java and C code to interact.
.LP
.RE
.SH "SYNOPSIS"
.LP

.LP
.nf
\f3
.fl
javah [ \fP\f3options\fP\f3 ] fully\-qualified\-classname. . .
.fl
javah_g [ \fP\f3options\fP\f3 ] fully\-qualified\-classname. . .
.fl
\fP
.fi

.LP
.SH "DESCRIPTION"
.LP

.LP
.LP
\f3javah\fP generates C header and source files that are needed to implement native methods. The generated header and source files are used by C programs to reference an object's instance variables from native source code. The .h file contains a struct definition whose layout parallels the layout of the corresponding class. The fields in the struct correspond to instance variables in the class.
.LP
.LP
The name of the header file and the structure declared within it are derived from the name of the class. If the class passed to \f3javah\fP is inside a package, the package name is prepended to both the header file name and the structure name. Underscores (_) are used as name delimiters.
.LP
.LP
By default \f3javah\fP creates a header file for each class listed on the command line and puts the files in the current directory. Use the \f2\-stubs\fP option to create source files. Use the \f2\-o\fP option to concatenate the results for all listed classes into a single file.
.LP
.LP
The new native method interface, Java Native Interface (JNI), does not require header information or stub files. \f3javah\fP can still be used to generate native method function proptotypes needed for JNI\-style native methods. \f3javah\fP produces JNI\-style output by default, and places the result in the .h file.
.LP
.LP
\f3javah_g\fP is a non\-optimized version of \f3javah\fP suitable for use with debuggers like jdb(1).
.LP
.SH "OPTIONS"
.LP

.LP
.RS 3
.TP 3
\-o outputfile 
Concatenates the resulting header or source files for all the classes listed on the command line into \f2outputfile\fP. Only one of \f3\-o\fP or \f3\-d\fP may be used. 
.TP 3
\-d directory 
Sets the directory where \f3javah\fP saves the header files or the stub files. Only one of \f3\-d\fP or \f3\-o\fP may be used. 
.TP 3
\-stubs 
Causes \f3javah\fP to generate C declarations from the Java object file. 
.TP 3
\-verbose 
Indicates verbose output and causes \f3javah\fP to print a message to stdout concerning the status of the generated files. 
.TP 3
\-help 
Print help message for \f3javah\fP usage. 
.TP 3
\-version 
Print out \f3javah\fP version information. 
.TP 3
\-jni 
Causes \f3javah\fP to create an output file containing JNI\-style native method function prototypes. This is the default output, so use of \f3\-jni\fP is optional. 
.TP 3
\-classpath path 
Specifies the path \f3javah\fP uses to look up classes. Overrides the default or the CLASSPATH environment variable if it is set. Directories are separated by colons. Thus the general format for \f2path\fP is: 
.nf
\f3
.fl
   .:<your_path>
.fl
\fP
.fi
For example: 
.nf
\f3
.fl
   .:/home/avh/classes:/usr/local/java/classes
.fl
\fP
.fi
.LP
As a special convenience, a class path element containing a basename of \f2*\fP is considered equivalent to specifying a list of all the files in the directory with the extension \f2.jar\fP or \f2.JAR\fP (a java program cannot tell the difference between the two invocations).
.br
.br
For example, if directory \f2foo\fP contains \f2a.jar\fP and \f2b.JAR\fP, then the class path element \f2foo/*\fP is expanded to a \f2A.jar:b.JAR\fP, except that the order of jar files is unspecified. All jar files in the specified directory, even hidden ones, are included in the list. A classpath entry consisting simply of \f2*\fP expands to a list of all the jar files in the current directory. The \f2CLASSPATH\fP environment variable, where defined, will be similarly expanded. Any classpath wildcard expansion occurs before the Java virtual machine is started \-\- no Java program will ever see unexpanded wildcards except by querying the environment. For example; by invoking \f2System.getenv("CLASSPATH")\fP.   
.TP 3
\-bootclasspath path 
Specifies path from which to load bootstrap classes. By default, the bootstrap classes are the classes implementing the core Java 2 platform located in \f2jre/lib/rt.jar\fP and several other jar files. 
.TP 3
\-old 
Specifies that old JDK1.0\-style header files should be generated. 
.TP 3
\-force 
Specifies that output files should always be written. 
.TP 3
\-Joption 
Pass \f2option\fP to the Java virtual machine, where \f2option\fP is one of the options described on the reference page for the java(1). For example, \f3\-J\-Xms48m\fP sets the startup memory to 48 megabytes. 
.RE

.LP
.SH "ENVIRONMENT VARIABLES"
.LP

.LP
.RS 3
.TP 3
CLASSPATH 
Used to provide the system a path to user\-defined classes. Directories are separated by colons, for example, 
.nf
\f3
.fl
.:/home/avh/classes:/usr/local/java/classes
.fl
\fP
.fi
.RE

.LP
.SH "SEE ALSO"
.LP

.LP
.LP
javac(1), java(1), jdb(1), javap(1), javadoc(1)
.LP

.LP
 
