
ocamlopt.opt (1)
NAME
ocamlopt - The Objective Caml native-code compiler
SYNOPSIS
ocamlopt [ -acivS ] [ -cclib libname ] [ -ccopt option ] [ -compact ] [
-unsafe ] [ -o exec-file ] [ -I lib-dir ] filename ...
ocamlopt.opt (same options)
DESCRIPTION
The Objective Caml high-performance native-code compiler ocamlopt(1)
compiles Caml source files to native code object files and link these
object files to produce standalone executables.
The ocamlopt(1) command has a command-line interface very close to that
of ocamlc(1). It accepts the same types of arguments:
Arguments ending in .mli are taken to be source files for compilation
unit interfaces. Interfaces specify the names exported by compilation
units: they declare value names with their types, define public data
types, declare abstract data types, and so on. From the file x.mli, the
ocamlopt(1) compiler produces a compiled interface in the file x.cmi.
The interface produced is identical to that produced by the bytecode
compiler ocamlc(1).
Arguments ending in .ml are taken to be source files for compilation
unit implementations. Implementations provide definitions for the names
exported by the unit, and also contain expressions to be evaluated for
their side-effects. From the file x.ml, the ocamlc(1) compiler pro-
duces two files: x.o, containing native object code, and x.cmx, con-
taining extra information for linking and optimization of the clients
of the unit. The compiled implementation should always be referred to
under the name x.cmx (when given a .o file, ocamlopt(1) assumes that it
contains code compiled from C, not from Caml).
The implementation is checked against the interface file x.mli (if it
exists) as described in the manual for ocamlc(1).
Arguments ending in .cmx are taken to be compiled object code. These
files are linked together, along with the object files obtained by com-
piling .ml arguments (if any), and the Caml Light standard library, to
produce a native-code executable program. The order in which .cmx and
.ml arguments are presented on the command line is relevant: compila-
tion units are initialized in that order at run-time, and it is a link-
time error to use a component of a unit before having initialized it.
Hence, a given x.cmx file must come before all .cmx files that refer to
the unit x.
Arguments ending in .cmxa are taken to be libraries of object code.
Such a library packs in two files lib.cmxa and lib.a a set of object
files (.cmx/.o files). Libraries are build with ocamlopt -a (see the
description of the -a option below). The object files contained in the
libraries. They are linked with the program.
The output of the linking phase is a regular Unix executable file. It
does not need ocamlrun(1) to run.
ocamlopt.opt is the same compiler as ocamlopt, but compiled with itself
instead of with the bytecode compiler ocamlc(1). Thus, it behaves
exactly like ocamlopt, but compiles faster. ocamlopt.opt is not avail-
able in all installations of Objective Caml.
OPTIONS
The following command-line options are recognized by ocamlopt(1).
-a Build a library (.cmxa/.a file) with the object files (.cmx/.o
files) given on the command line, instead of linking them into
an executable file. The name of the library can be set with the
-o option. The default name is library.cmxa.
-c Compile only. Suppress the linking phase of the compilation.
Source code files are turned into compiled files, but no exe-
cutable file is produced. This option is useful to compile mod-
ules separately.
-cclib -llibname
Pass the -llibname option to the linker. This causes the given C
library to be linked with the program.
-ccopt option
Pass the given option to the C compiler and linker. For
instance, -ccopt -L dir causes the C linker to search for C
libraries in directory dir.
-compact
Optimize the produced code for space rather than for time. This
results in smaller but slightly slower programs. The default is
to optimize for speed.
-i Cause the compiler to print all defined names (with their
inferred types or their definitions) when compiling an implemen-
tation (.ml file). This can be useful to check the types
inferred by the compiler. Also, since the output follows the
syntax of interfaces, it can help in writing an explicit inter-
face (.mli file) for a file: just redirect the standard output
of the compiler to a .mli file, and edit that file to remove all
declarations of unexported names.
-I directory
Add the given directory to the list of directories searched for
compiled interface files (.cmi) and compiled object code files
default output name is a.out, in keeping with the Unix tradi-
tion. If the -a option is given, specify the name of the library
produced.
-S Keep the assembly code produced during the compilation. The
assembly code for the source file x.ml is saved in the file x.s.
-v Print the version number of the compiler.
-unsafe
Turn bound checking off on array and string accesses (the v.(i)
and s.[i] constructs). Programs compiled with -unsafe are there-
fore faster, but unsafe: anything can happen if the program
accesses an array or string outside of its bounds.
SEE ALSO
ocamlc(1).
The Objective Caml user's manual, chapter "Native-code compilation".
ocamlopt(1)