Building Trilinos


What is Trilinos?

Trilinos is an effort to develop algorithms and enabling technologies within an object-oriented software framework for the solution of large-scale, complex multi-physics engineering and scientific problems. A unique design feature of Trilinos is its focus on packages. Top

What's significant about the name 'Trilinos'?

Trilinos is a Greek term which, loosely translated, means "a string of pearls." More literally translated, it refers to a string of three pearls--Trilinos started out with three packages, but has since expanded to include many more. Each Trilinos package is intended to be a "pearl" in its own right, but is even more valuable when combined with the other packages. Top

What platforms does Trilinos run on?

Trilinos runs on a wide variety of platforms, including Linux, MAC OS X, Windows, SGI64, DEC, and Solaris. Top

Can I make my project a Trilinos package?

Indeed. Trilinos has an open architecture that facilitates easy incorporation of new packages. Trilinos also provides a number of useful services to package developers. For more information on integrating your work into Trilinos, contact Mike Heroux. Top

Can I get involved in the development of Trilinos?

The need for more help with Trilinos projects varies and depends on the current needs of each package. To find out about opportunities to contribute, contact Mike Heroux. Top

Who should I contact if I have more questions?

Questions not answered by the information provided on the website should be directed to the appropriate package lead developer (see the Contact page) or, if not package-specific, to Mike Heroux, the Trilinos project leader. Top

Building Trilinos

I attempted to fix an error that is occurring, but it seems like the fix had no effect at all. What might be happening?

Several things could be happening. The first thing to try is to remove the CMakeCache.txt file and redo the configure process.

When using a do-configure script, make sure that line continuation characters (\) are used properly. The characters should be at the end of every line, except the last line, and should not be followed by any spaces.

Keep in mind that CMake cannot detect spelling mistakes.


I want to link my code to a Trilinos library. Is there an easy way to do this?

For a software project that uses CMake, use the FIND_PACKAGE(Trilinos) capability.

A robust solution for projects that do not use CMake is not currently available.


I downloaded the Trilinos tarball on my MAC running OSX and used DropZip to untar the tarball. I have had no luck building Trilinos. What is wrong?

The build process will fail on OSX if "DropZip" is used to unzip the Trilinos tarball. This utility truncates long file names.


How can I speed up the configure and build prccesses?

Keep in mind that Trilinos is a large piece of software and that building all of the libraries that are a part of Trilinos will take some time. That having been said, here are two suggestions for speeding up the configure and build processes:
  1. Only build the Trilinos libraries that are necessary.

    Packages that explicitly enabled packages depend on will be turned on automatically, so it is not necessary to use the Trilinos_ENABLE_ALL_PACKAGES option. If a package configures and builds that was not enabled explicitly, keep in mind that a package that was enabled probably depends on this package.

  2. Decrease build time on some machines by creating multiple jobs.

    If -j (jobs) is a valid option for make, specifying the -j option with a value of two times the number of processors that the machine has will typically result in a faster build process. For example, on a dual processor machine, try replacing make with make -j 4 during the build step.

    On a single processor machine, the speedup is minimal; on a machine with multiple processors, the speedup can be quite significant. For example, speedups of 1.73 and 2.45 were observed on a dual processor machine and a four processor machine, respectively. Using two times the number of processors for the argument to the jobs option is only a suggestion based on observed performance; those who are interested in achieving optimal performance are encouraged to experiment with various values and to report their findings to The -j can also be passed without a corresponding value, in other words make -j. When used in this way, the number of jobs created is unlimited. For machines with a large number of processors this appears to work in some situations, but this can easily spawn too many processes and cause severe slowdowns, so it is not recommended.

Why can't I compile Trilinos Python wrappers using the "-ansi -pedantic" options?

Since python supports arbitrary precision integers, you cannot compile code (such as Trilinos wrappers) that #include "Python.h" using the "-ansi -pedantic" options (technically, it may only be one of the two options that is the culprit).


When compiling Trilinos in parallel using an MPI-2 standard-compliant library, I get the following compile-time errors:

/opt/mpich2-gcc/include/mpicxx.h:26:2: #error "SEEK_SET is #defined but must not be for the C++ binding of MPI"
/opt/mpich2-gcc/include/mpicxx.h:30:2: #error "SEEK_CUR is #defined but must not be for the C++ binding of MPI"
/opt/mpich2-gcc/include/mpicxx.h:35:2: #error "SEEK_END is #defined but must not be for the C++ binding of MPI"

There is a problem with the MPI-2 standard where both stdio.h and the MPI C++ interface define SEEK_SET, SEEK_CUR, and SEEK_END. To remedy this issue for the MPICH2 library


needs to be included in the CPPFLAGS that Trilinos is compiled with. This will cause the MPI versions of SEEK_[SET,CUR,END] to be skipped.

Reference: MPICH2 User's Guide, Version 1.0.1b, Argonne National Laboratory, June 10, 2005, p.5


Debian/Ubuntu packaging of Trilinos

Debian/Ubuntu packages for Trilinos