.'" t
."
." Copyright 2000-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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
." CA 95054 USA or visit www.sun.com if you need additional information or
." have any questions.
." .
." `
.TH javah 1 "05 Aug 2006"
." Generated by html2roff

.LP
.SH NAME
javah \- C Header and Stub File Generator
.LP

.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
.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 \f3jdb\fP.
.LP
.SH "OPTIONS"
.LP

.LP
.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 application launcher. For example, \f3\-J\-Xms48m\fP sets the startup memory to 48 megabytes. 
.LP
.SH "ENVIRONMENT VARIABLES"
.LP

.LP
.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

.LP
.SH "SEE ALSO"
.LP

.LP
.LP
javac, java, jdb, javap, javadoc
.LP

.LP
 
