FARSIGHT Tutorials/Building Software/Bio-Formats/Building C++ Bindings

From FarsightWiki
Revision as of 17:32, 5 July 2011 by Curtis (Talk | contribs)
Jump to: navigation, search

Contents

NOTICE

The instructions below are out of date, and need to be updated.

There are two issues. First, the Bio-Formats code moved to Git. For details, see:

 http://www.loci.wisc.edu/bio-formats/source-code

Second, the generation/build process has been substantially streamlined. There is now a Bio-Formats ITK plugin that does not require the Bio-Formats C++ bindings at all, but rather uses pipes.

If you still want to build the Bio-Formats C++ bindings, you can find up-to-date instructions here.

If you just want to build the Bio-Formats ITK plugin for use with FARSIGHT, the project can be found in the components/native/bf-itk-pipe folder of bio-formats.git.


Overview

The Bio-Formats C++ bindings provide 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.


Prerequisites

The following packages should be installed in order:

  1. Installing CMake
  2. Installing Apache Ant
  3. Installing Subversion
  4. Installing Boost Thread
  5. Installing Java Development Kit
  6. Installing Visual C++ (Windows only)
  7. Downloading Jace


Downloading Bio-Formats

Execute the following command:

svn co http://dev.loci.wisc.edu/svn/software/trunk /path/to/loci

Where /path/to/loci is the desired location of your LOCI Software source code checkout.

The above command assumes you have the svn command line tool for Subversion installed. It should also work fine to plug in the above information to any graphical Subversion client (e.g., TortoiseSVN).


Compiling the code

Once you have the prerequisites installed, you must first build the loci_tools.jar library:

  1. Change to the root directory of the checkout.
  2. Execute the command:
ant tools

Finally, you can compile the Bio-Formats C++ bindings:

  1. Change to the components/native/bf-cpp directory.
  2. Execute the command:
ant -Djace.home=/path/to/jace

Where /path/to/jace is the location of your Jace source code checkout. Do not use a relative path, and use forward slashes, even on Windows.

If all goes well, the build system will:

  1. Build the Jace Java and C++ libraries.
  2. Generate the Bio-Formats C++ proxy classes.
  3. Build the Bio-Formats C++ shared library.
  4. Build the showinf command line tool, for testing the functionality.

Please be patient, as the build may require several minutes to complete.

On some systems (in particular, Ubuntu Linux), you may see an error message indicating that the JAVA_INCLUDE_PATH, JAVA_INCLUDE_PATH2, and JAVA_JVM_LIBRARY environment variables have been set to NOTFOUND. The solution to this is to set the JAVA_HOME environment variable to point to your JVM installation, e.g.

export JAVA_HOME=/usr/lib/jvm/java-6-sun/

Make sure that you double-check the location of your JVM installation, as it may be different.

Compiling on Windows with Visual C++

The compilation instructions above are accurate, except that:

  1. Instead of compiling the C++ source from the command line, the build system launches Visual Studio to complete the build process. You need to select "Build project" from the Build menu to finish the build.
  2. The shared libraries and executables are placed in a subdirectory of the build folder based on the active solution configuration, typically either "debug" or "release." The Ant script takes care of placing a copy of the necessary JAR files in both folders, but if you use a different configuration you will need to copy the JAR files into the correct subdirectory yourself.

Important note about Visual C++ versions

With Visual C++ 2008 Express, the compile should work out of the box. However, for other versions of Visual Studio (e.g., 2005), you will need to edit the build.properties file and set the cmake.generator.windows property as appropriate for your version of Visual Studio.

Alternately, you may be able to use cmake-gui to explicitly select the target compiler, then rerun the ant command.

Build results

Afterwards, the build subdirectory will contain the following files:

  1. libjace.so / libjace.jnilib / jace.dll — Jace shared library
  2. libbfcpp.so / libbfcpp.dylib / bfcpp.dll — Bio-Formats C++ bindings
  3. jace-runtime.jar — Jace Java classes needed at runtime
  4. loci_tools.jar — Bio-Formats Java library needed at runtime
  5. showinf / showinf.exe — Example command line application

Items 1-4 are necessary and required to deploy Bio-Formats with FARSIGHT. All other files, including the showinf program and various build files generated by CMake, are not needed.

You should verify that the bindings are working by executing the showinf command from the build subdirectory. If all goes well, you will see a message like:

curtis@monk:~/svn/java/components/native/bf-cpp/build$ ./showinf
Creating JVM... JVM created.
To test read a file in any format, run:
  showinf file [-nopix] [-nocore] [-nometa] [-thumbs] 
    [-merge] [-stitch] [-separate] [-expand] [-omexml]
    [-normalize] [-range start end] [-series num]
    [-swap inputOrder] [-shuffle outputOrder] [-preload]
    [-xmlversion v] [-crop x,y,w,h]

  -version: print the library version and exit
      file: the image file to read
    -nopix: read metadata only, not pixels
   -nocore: do not output core metadata
   -nometa: do not parse format-specific metadata table
 -nofilter: do not filter metadata fields
   -thumbs: read thumbnails instead of normal pixels
    -merge: combine separate channels into RGB image
   -stitch: stitch files with similar names
 -separate: split RGB image into separate channels
   -expand: expand indexed color to RGB
   -omexml: populate OME-XML metadata
-normalize: normalize floating point images*
    -range: specify range of planes to read (inclusive)
   -series: specify which image series to read
     -swap: override the default input dimension order
  -shuffle: override the default output dimension order
  -preload: pre-read entire file into a buffer; significantly
            reduces the time required to read the images, but
            requires more memory
  -xmlversion: specify which OME-XML version to generate

 * = may result in loss of precision

Once the bindings are functional, proceed to the Bio-Formats ITK plugin build instructions.

Please direct questions to the Bio-Formats team.

Personal tools