280 lines
21 KiB
HTML
280 lines
21 KiB
HTML
<!DOCTYPE html>
|
||
<html class="writer-html5" lang="en">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>4.7. Specifying compilers and flags — Open MPI 5.0.7 documentation</title>
|
||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
|
||
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
|
||
|
||
|
||
<!--[if lt IE 9]>
|
||
<script src="../_static/js/html5shiv.min.js"></script>
|
||
<![endif]-->
|
||
|
||
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
|
||
<script src="../_static/jquery.js"></script>
|
||
<script src="../_static/underscore.js"></script>
|
||
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
|
||
<script src="../_static/doctools.js"></script>
|
||
<script src="../_static/sphinx_highlight.js"></script>
|
||
<script src="../_static/js/theme.js"></script>
|
||
<link rel="index" title="Index" href="../genindex.html" />
|
||
<link rel="search" title="Search" href="../search.html" />
|
||
<link rel="next" title="4.8. Required support libraries" href="required-support-libraries.html" />
|
||
<link rel="prev" title="4.6. VPATH builds" href="vpath-builds.html" />
|
||
</head>
|
||
|
||
<body class="wy-body-for-nav">
|
||
<div class="wy-grid-for-nav">
|
||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||
<div class="wy-side-scroll">
|
||
<div class="wy-side-nav-search" >
|
||
|
||
|
||
|
||
<a href="../index.html" class="icon icon-home">
|
||
Open MPI
|
||
</a>
|
||
<div role="search">
|
||
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||
<ul class="current">
|
||
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">1. Quick start</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../getting-help.html">2. Getting help</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../release-notes/index.html">3. Release notes</a></li>
|
||
<li class="toctree-l1 current"><a class="reference internal" href="index.html">4. Building and installing Open MPI</a><ul class="current">
|
||
<li class="toctree-l2"><a class="reference internal" href="quickstart.html">4.1. Quick start: Installing Open MPI</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="downloading.html">4.2. Downloading Open MPI</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="supported-systems.html">4.3. Supported Systems</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="definitions.html">4.4. Definitions</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="filesystem-requirements.html">4.5. Filesystem requirements</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="vpath-builds.html">4.6. VPATH builds</a></li>
|
||
<li class="toctree-l2 current"><a class="current reference internal" href="#">4.7. Specifying compilers and flags</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="#statically-linking-to-the-libraries-of-intel-compiler-suite">4.7.1. Statically linking to the libraries of Intel compiler suite</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l2"><a class="reference internal" href="required-support-libraries.html">4.8. Required support libraries</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="configure-cli-options/index.html">4.9. <code class="docutils literal notranslate"><span class="pre">configure</span></code> command line options</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="configure-output-summary.html">4.10. <code class="docutils literal notranslate"><span class="pre">configure</span></code> output summary</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="make-targets.html">4.11. <code class="docutils literal notranslate"><span class="pre">make</span></code> targets</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="installation-location.html">4.12. Installation location</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="custom-components.html">4.13. Installing custom components</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="updating.html">4.14. Updating or upgrading an Open MPI installation</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="packagers.html">4.15. Advice for packagers</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="sysadmins.html">4.16. Advice for System Administrators</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../features/index.html">5. Open MPI-specific features</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../validate.html">6. Validating your installation</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../version-numbering.html">7. Version numbers and compatibility</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../mca.html">8. The Modular Component Architecture (MCA)</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../building-apps/index.html">9. Building MPI applications</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../launching-apps/index.html">10. Launching MPI applications</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../tuning-apps/index.html">11. Run-time operation and tuning MPI applications</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../app-debug/index.html">12. Debugging Open MPI Parallel Applications</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../developers/index.html">13. Developer’s guide</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">14. Contributing to Open MPI</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../license/index.html">15. License</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../history.html">16. History of Open MPI</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../man-openmpi/index.html">17. Open MPI manual pages</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../man-openshmem/index.html">18. OpenSHMEM manual pages</a></li>
|
||
</ul>
|
||
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||
<a href="../index.html">Open MPI</a>
|
||
</nav>
|
||
|
||
<div class="wy-nav-content">
|
||
<div class="rst-content">
|
||
<div role="navigation" aria-label="Page navigation">
|
||
<ul class="wy-breadcrumbs">
|
||
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
|
||
<li class="breadcrumb-item"><a href="index.html"><span class="section-number">4. </span>Building and installing Open MPI</a></li>
|
||
<li class="breadcrumb-item active"><span class="section-number">4.7. </span>Specifying compilers and flags</li>
|
||
<li class="wy-breadcrumbs-aside">
|
||
<a href="../_sources/installing-open-mpi/compilers-and-flags.rst.txt" rel="nofollow"> View page source</a>
|
||
</li>
|
||
</ul>
|
||
<hr/>
|
||
</div>
|
||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||
<div itemprop="articleBody">
|
||
|
||
<style>
|
||
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
|
||
</style><div class="section" id="specifying-compilers-and-flags">
|
||
<span id="install-configure-compilers-and-flags-label"></span><h1><span class="section-number">4.7. </span>Specifying compilers and flags<a class="headerlink" href="#specifying-compilers-and-flags" title="Permalink to this heading"></a></h1>
|
||
<p>Changing the compilers that Open MPI uses to build itself uses the
|
||
standard GNU Autoconf mechanism of setting special environment variables
|
||
either before invoking <code class="docutils literal notranslate"><span class="pre">configure</span></code> or on the <code class="docutils literal notranslate"><span class="pre">configure</span></code> command
|
||
line itself.</p>
|
||
<p>The following environment variables are recognized by <code class="docutils literal notranslate"><span class="pre">configure</span></code>:</p>
|
||
<ul class="simple">
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">CC</span></code>: C compiler to use</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">CFLAGS</span></code>: Compile flags to pass to the C compiler</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">CPPFLAGS</span></code>: Preprocessor flags to pass to the C compiler</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">CXX</span></code>: C++ compiler to use</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">CXXCFLAGS</span></code>: Compile flags to pass to the C++ compiler</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">CXXCPPFLAGS</span></code>: Preprocessor flags to pass to the C++ compiler</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">FC</span></code>: Fortran compiler to use</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">FCFLAGS</span></code>: Compile flags to pass to the Fortran compiler</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">LDFLAGS</span></code>: Linker flags to pass to all compilers</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">LIBS</span></code>: Libraries to pass to all compilers (it is rarely
|
||
necessary for users to need to specify additional <code class="docutils literal notranslate"><span class="pre">LIBS</span></code>)</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">PKG_CONFIG</span></code>: Path to the <code class="docutils literal notranslate"><span class="pre">pkg-config</span></code> utility</p></li>
|
||
</ul>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">Note</p>
|
||
<p>Open MPI v5.0.7 does not contain any C++ code. The only
|
||
tests that <code class="docutils literal notranslate"><span class="pre">configure</span></code> runs with the C++ compiler is for
|
||
the purposes of determining an appropriate value for <code class="docutils literal notranslate"><span class="pre">CXX</span></code>
|
||
to use in the <code class="docutils literal notranslate"><span class="pre">mpic++</span></code> <a class="reference internal" href="../building-apps/quickstart.html#label-quickstart-building-apps"><span class="std std-ref">wrapper compiler</span></a>. The <code class="docutils literal notranslate"><span class="pre">CXXCFLAGS</span></code> and
|
||
<code class="docutils literal notranslate"><span class="pre">CXXCPPFLAGS</span></code> values are <em>only</em> used in these
|
||
<code class="docutils literal notranslate"><span class="pre">configure</span></code> checks to ensure that the C++ compiler works.</p>
|
||
</div>
|
||
<p>For example, to build with a specific instance of <code class="docutils literal notranslate"><span class="pre">gcc</span></code>, <code class="docutils literal notranslate"><span class="pre">g++</span></code>,
|
||
and <code class="docutils literal notranslate"><span class="pre">gfortran</span></code>:</p>
|
||
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>shell$<span class="w"> </span>./configure<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span><span class="nv">CC</span><span class="o">=</span>/opt/gcc-a.b.c/bin/gcc<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span><span class="nv">CXX</span><span class="o">=</span>/opt/gcc-a.b.c/bin/g++<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span><span class="nv">FC</span><span class="o">=</span>/opt/gcc-a.b.c/bin/gfortran<span class="w"> </span>...
|
||
</pre></div>
|
||
</div>
|
||
<p>Here’s another example, this time showing building with the Intel
|
||
compiler suite:</p>
|
||
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>shell$<span class="w"> </span>./configure<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span><span class="nv">CC</span><span class="o">=</span>icc<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span><span class="nv">CXX</span><span class="o">=</span>icpc<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span><span class="nv">FC</span><span class="o">=</span>ifort<span class="w"> </span>...
|
||
</pre></div>
|
||
</div>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">Note</p>
|
||
<p>The Open MPI community generally suggests using the above
|
||
command line form for setting different compilers (vs. setting
|
||
environment variables and then invoking <code class="docutils literal notranslate"><span class="pre">./configure</span></code>). The
|
||
above form will save all variables and values in the <code class="docutils literal notranslate"><span class="pre">config.log</span></code>
|
||
file, which makes post-mortem analysis easier if problems occur.</p>
|
||
</div>
|
||
<p>Note that the flags you specify must be compatible across all the
|
||
compilers. In particular, flags specified to one language compiler
|
||
must generate code that can be compiled and linked against code that
|
||
is generated by the other language compilers. For example, on a 64
|
||
bit system where the compiler default is to build 32 bit executables:</p>
|
||
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># Assuming the GNU compiler suite</span>
|
||
shell$<span class="w"> </span>./configure<span class="w"> </span><span class="nv">CFLAGS</span><span class="o">=</span>-m64<span class="w"> </span>...
|
||
</pre></div>
|
||
</div>
|
||
<p>will produce 64 bit C objects, but 32 bit objects for Fortran. These
|
||
codes will be incompatible with each other, and Open MPI will not build
|
||
successfully. Instead, you must specify building 64 bit objects for
|
||
<em>all</em> languages:</p>
|
||
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># Assuming the GNU compiler suite</span>
|
||
shell$<span class="w"> </span>./configure<span class="w"> </span><span class="nv">CFLAGS</span><span class="o">=</span>-m64<span class="w"> </span><span class="nv">FCFLAGS</span><span class="o">=</span>-m64<span class="w"> </span>...
|
||
</pre></div>
|
||
</div>
|
||
<p>The above command line will pass <code class="docutils literal notranslate"><span class="pre">-m64</span></code> to all the compilers, and
|
||
therefore will produce 64 bit objects for all languages.</p>
|
||
<div class="admonition warning">
|
||
<p class="admonition-title">Warning</p>
|
||
<p>Note that setting <code class="docutils literal notranslate"><span class="pre">CFLAGS</span></code> (etc.) does <em>not</em> affect the
|
||
flags used by the <a class="reference internal" href="../building-apps/quickstart.html#label-quickstart-building-apps"><span class="std std-ref">wrapper compilers</span></a>. In the above, example, you may
|
||
also need to add <code class="docutils literal notranslate"><span class="pre">-m64</span></code> to various <code class="docutils literal notranslate"><span class="pre">--with-wrapper-FOO</span></code>
|
||
options:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>shell$ ./configure CFLAGS=-m64 FCFLAGS=-m64 \
|
||
--with-wrapper-cflags=-m64 \
|
||
--with-wrapper-cxxflags=-m64 \
|
||
--with-wrapper-fcflags=-m64 ...
|
||
</pre></div>
|
||
</div>
|
||
<p>Failure to do this will result in MPI applications
|
||
failing to compile / link properly.</p>
|
||
<p>See the <a class="reference internal" href="../building-apps/customizing-wrappers.html#label-customizing-wrapper-compiler"><span class="std std-ref">Customizing wrapper compiler behavior</span></a> section for more
|
||
details.</p>
|
||
</div>
|
||
<p>Note that if you intend to compile Open MPI with a <code class="docutils literal notranslate"><span class="pre">make</span></code> other than
|
||
the default one in your <code class="docutils literal notranslate"><span class="pre">PATH</span></code>, then you must either set the <code class="docutils literal notranslate"><span class="pre">$MAKE</span></code>
|
||
environment variable before invoking Open MPI’s <code class="docutils literal notranslate"><span class="pre">configure</span></code> script, or
|
||
pass <code class="docutils literal notranslate"><span class="pre">MAKE=your_make_prog</span></code> to configure. For example:</p>
|
||
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>shell$<span class="w"> </span>./configure<span class="w"> </span><span class="nv">MAKE</span><span class="o">=</span>/path/to/my/make<span class="w"> </span>...
|
||
</pre></div>
|
||
</div>
|
||
<p>This could be the case, for instance, if you have a shell alias for
|
||
<code class="docutils literal notranslate"><span class="pre">make</span></code>, or you always type <code class="docutils literal notranslate"><span class="pre">gmake</span></code> out of habit. Failure to tell
|
||
<code class="docutils literal notranslate"><span class="pre">configure</span></code> which non-default <code class="docutils literal notranslate"><span class="pre">make</span></code> you will use to compile Open MPI
|
||
can result in undefined behavior (meaning: don’t do that).</p>
|
||
<p>Note that you may also want to ensure that the value of
|
||
<code class="docutils literal notranslate"><span class="pre">LD_LIBRARY_PATH</span></code> is set appropriately (or not at all) for your build
|
||
(or whatever environment variable is relevant for your operating
|
||
system). For example, some users have been tripped up by setting to
|
||
use a non-default Fortran compiler via the <code class="docutils literal notranslate"><span class="pre">FC</span></code> environment variable,
|
||
but then failing to set <code class="docutils literal notranslate"><span class="pre">LD_LIBRARY_PATH</span></code> to include the directory
|
||
containing that non-default Fortran compiler’s support libraries.
|
||
This causes Open MPI’s <code class="docutils literal notranslate"><span class="pre">configure</span></code> script to fail when it tries to
|
||
compile / link / run simple Fortran programs.</p>
|
||
<p>It is required that the compilers specified be compile and link
|
||
compatible, meaning that object files created by one compiler must be
|
||
able to be linked with object files from the other compilers and
|
||
produce correctly functioning executables.</p>
|
||
<div class="section" id="statically-linking-to-the-libraries-of-intel-compiler-suite">
|
||
<h2><span class="section-number">4.7.1. </span>Statically linking to the libraries of Intel compiler suite<a class="headerlink" href="#statically-linking-to-the-libraries-of-intel-compiler-suite" title="Permalink to this heading"></a></h2>
|
||
<p>The Intel compiler suite, by default, dynamically links its runtime libraries
|
||
against the Open MPI binaries and libraries. This can cause problems if the
|
||
Intel compiler libraries are installed in non-standard locations. For example,
|
||
you might get errors like:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>error while loading shared libraries: libimf.so: cannot open shared object file:
|
||
No such file or directory
|
||
</pre></div>
|
||
</div>
|
||
<p>To avoid such problems, you can pass flags to Open MPI’s configure
|
||
script that instruct the Intel compiler suite to statically link its
|
||
runtime libraries with Open MPI:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>shell$ ./configure CC=icc CXX=icpc FC=ifort LDFLAGS=-Wc,-static-intel ...
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||
<a href="vpath-builds.html" class="btn btn-neutral float-left" title="4.6. VPATH builds" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||
<a href="required-support-libraries.html" class="btn btn-neutral float-right" title="4.8. Required support libraries" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||
</div>
|
||
|
||
<hr/>
|
||
|
||
<div role="contentinfo">
|
||
<p>© Copyright 2003-2025, The Open MPI Community.</p>
|
||
</div>
|
||
|
||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||
|
||
|
||
</footer>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<script>
|
||
jQuery(function () {
|
||
SphinxRtdTheme.Navigation.enable(true);
|
||
});
|
||
</script>
|
||
|
||
</body>
|
||
</html> |