.'" t
." Copyright 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
 
