Add fixes for multiple definitions of ERROR on Windows to docs.
- Explain the various ways to fix the problem of multiple definitions
of ERROR from glog / miniglog vs windows.h.
- Add note about use of CMAKE_LIBRARY_PATH to aid FindBLAS & FindLAPACK.
- Fix minor style typo in code-block for sample Ceres output.
Change-Id: I21742614f4c5a8fe1ac8f66811b7777a72bcc503
diff --git a/docs/source/building.rst b/docs/source/building.rst
index 2c187b9..cc2acd9 100644
--- a/docs/source/building.rst
+++ b/docs/source/building.rst
@@ -134,6 +134,7 @@
this.
.. code-block:: bash
+
iter cost cost_change |gradient| |step| tr_ratio tr_radius ls_iter iter_time total_time
0 4.185660e+06 0.00e+00 1.09e+08 0.00e+00 0.00e+00 1.00e+04 0 7.59e-02 3.37e-01
1 1.062590e+05 4.08e+06 8.99e+06 5.36e+02 9.82e-01 3.00e+04 1 1.65e-01 5.03e-01
@@ -255,6 +256,24 @@
building these libraries. Building on Windows also a bit more involved since
there is no automated way to install dependencies.
+.. NOTE:: Using ``google-glog`` & ``miniglog`` with windows.h.
+
+ The windows.h header if used with GDI (Graphics Device Interface) defines
+ ``ERROR``, which conflicts with the definition of ``ERROR`` as a LogSeverity
+ level in ``google-glog`` and ``miniglog``. There are at least two possible
+ fixes to this problem:
+
+ #. Use ``google-glog`` and define ``GLOG_NO_ABBREVIATED_SEVERITIES``
+ when building Ceres and your own project, as documented
+ `here <http://google-glog.googlecode.com/svn/trunk/doc/glog.html>`__.
+ Note that this fix will not work for ``miniglog``,
+ but use of ``miniglog`` is strongly discouraged on any platform for which
+ ``google-glog`` is available (which includes Windows).
+ #. If you do not require GDI, then define ``NOGDI`` **before** including
+ windows.h. This solution should work for both ``google-glog`` and
+ ``miniglog`` and is documented for ``google-glog``
+ `here <https://code.google.com/p/google-glog/issues/detail?id=33>`__.
+
#. Make a toplevel directory for deps & build & src somewhere: ``ceres/``
#. Get dependencies; unpack them as subdirectories in ``ceres/``
(``ceres/eigen``, ``ceres/glog``, etc)
@@ -504,16 +523,23 @@
Building using custom BLAS & LAPACK installs
----------------------------------------------
-If you are building on an exotic system, then the standard find package
-scripts for ``BLAS`` & ``LAPACK`` which ship with ``CMake`` might not
-work. In this case, one option would be to write your own custom versions for
-your environment and then set ``CMAKE_MODULE_PATH`` to the directory
-containing these custom scripts when invoking ``CMake`` to build Ceres and they
-will be used in preference to the default versions. However, in order for this
-to work, your scripts must provide the full set of variables provided by the
-default scripts. Also, if you are building Ceres with ``SuiteSparse``, the
-versions of ``BLAS`` & ``LAPACK`` used by ``SuiteSparse`` and Ceres should be
-the same.
+If the standard find package scripts for ``BLAS`` & ``LAPACK`` which ship with
+``CMake`` fail to find the desired libraries on your system, try setting
+``CMAKE_LIBRARY_PATH`` to the path(s) to the directories containing the
+``BLAS`` & ``LAPACK`` libraries when invoking ``CMake`` to build Ceres via
+``-D<VAR>=<VALUE>``. This should result in the libraries being found for any
+common variant of each.
+
+If you are building on an exotic system, or setting ``CMAKE_LIBRARY_PATH``
+does not work, or is not appropriate for some other reason, one option would be
+to write your own custom versions of ``FindBLAS.cmake`` &
+``FindLAPACK.cmake`` specific to your environment. In this case you must set
+``CMAKE_MODULE_PATH`` to the directory containing these custom scripts when
+invoking ``CMake`` to build Ceres and they will be used in preference to the
+default versions. However, in order for this to work, your scripts must provide
+the full set of variables provided by the default scripts. Also, if you are
+building Ceres with ``SuiteSparse``, the versions of ``BLAS`` & ``LAPACK``
+used by ``SuiteSparse`` and Ceres should be the same.
.. _section-using-ceres: