Build instructions for C++ bindings
===================================
This package provides language bindings for calling into the Bio-Formats Java
library from C++ in a cross-platform manner. As of this writing the bindings
are functional with GCC on Linux and Mac OS X systems, as well as with Visual
C++ 2005 and Visual C++ 2008 on Windows.
.. note::
The JACE C++ bindings require Java 6 or Java 7 to build and run.
They do *not* currently work with Java 8.
Compile-time dependencies
-------------------------
To build the Bio-Formats C++ bindings from source, the following modules are
required:
- `Apache Maven `_
Maven is a software project management and comprehension tool. Along with
Ant, it is one of the supported build systems for the Bio-Formats Java
library, and is used to generate the Bio-Formats C++ bindings.
- `CMake `_
CMake is a cross-platform, open source build system generator, commonly
used to build C++ projects in a platform-independent manner. CMake
supports GNU make as well as Microsoft Visual Studio, allowing the
Bio-Formats C++ bindings to be compiled on Windows, Mac OS X, Linux and
potentially other platforms.
- `Boost Thread `_
Boost is a project providing open source portable C++ source libraries. It
has become a suite of de facto standard libraries for C++. The Bio-Formats
C++ bindings require the Boost Thread module in order to handle C++
threads in a platform independent way.
- `Java Development Kit `_
Version 6 or 7 is required; version 8 is not currently supported.
At runtime, only the Java Runtime Environment (JRE) is necessary
to execute the Bio-Formats code. However, the full J2SE
development kit is required at compile time on some platforms
(Windows in particular), since it comes bundled with the |JVM|
shared library (jvm.lib) necessary to link with Java.
For information on installing these dependencies, refer to the page for your
specific platform:
:doc:`Windows `,
:doc:`Mac OS X `,
:doc:`Linux `.
How to build
------------
The process of building the Bio-Formats C++ bindings is divided into two
steps:
1) Generate a C++ project consisting of "proxies" which wrap the Java code.
This step utilizes the Maven project management tool, specifically a
Maven plugin called cppwrap.
2) Compile this generated C++ project. This step utilizes the cross-platform
CMake build system.
For details on executing these build steps, refer to the page for your
specific platform:
:doc:`Windows `,
:doc:`Mac OS X `,
:doc:`Linux `.
Build results
-------------
If all goes well, the build system will:
1) Generate the Bio-Formats C++ proxy classes;
2) Build the Jace C++ library;
3) Build the Java Tools C++ library;
4) Build the Bio-Formats C++ shared library;
5) Build the showinf and minimum_writer command line tools,
for testing the functionality.
Please be patient, as the build may require several minutes to complete.
Afterwards, the dist/formats-bsd subdirectory will contain the following files:
1) libjace.so / libjace.jnilib / jace.dll :
Jace shared library
2) libformats-bsd.so / libformats-bsd.dylib / formats-bsd.dll :
C++ shared library for BSD-licensed readers and writers
3) jace-runtime.jar :
Jace Java classes needed at runtime
4) bioformats_package.jar :
Bio-Formats Java library needed at runtime
5) libjtools.so / libjtools.jnilib / jtools.dll :
Java Tools shared library
6) showinf / showinf.exe :
Example command line application
7) minimum_writer / minimum_writer.exe :
Example command line application
Items 1-4 are necessary and required to deploy Bio-Formats with your C++
application. Item 5 (jtools) is a useful helper library for managing the Java
virtual machine from C++, but is not strictly necessary to use Bio-Formats.
All other files, including the example programs and various build files
generated by CMake, are not needed.
If you prefer, instead of using the bioformats_package.jar bundle, you can provide
individual JAR files as appropriate for your application. For details, see
:doc:`using Bio-Formats as a Java library <../java-library>`.
Please direct any questions to the OME team on the
:forum:`forums <>` or :mailinglist:`mailing lists <>`.