Documentation/Nightly/Developers/FAQ/Building
For the latest Slicer documentation, visit the read-the-docs. |
Contents
- 1 Building
- 1.1 How is organized the Slicer build tree ?
- 1.2 What is a clean build ?
- 1.3 What to do if QtSDK installer hangs ?
- 1.4 Which minimum version of GLIBC is needed to build Slicer ?
- 1.5 What to do if Visual Studio compiler crashes ?
- 1.6 How to build Slicer with SSL support ?
- 1.7 Why Qt 4 >= 4.8.5 should be used on Ubuntu 12.04 and above ?
- 1.8 Why distributed CMake can not be used on Ubuntu 12.04 and above ?
- 1.9 What is the ITKFactoryRegistration library ?
- 1.10 How to configure network proxy ?
Building
How is organized the Slicer build tree ?
The Slicer build tree has two levels:
~/Projects/Slicer-SuperBuild
~/Projects/Slicer-SuperBuild/Slicer-build
The first level manages all the external dependencies of Slicer (VTK, ITK, Python, ...). The second level is the "traditional" build directory of Slicer.
See Slicer directory structure
What is a clean build ?
Doing a clean build means that
(1) all directories and files in the top-level build directory ~/Projects/Slicer-SuperBuild
are removed.
and
(2) you updated your source checkout and have no locally modified files.
What to do if QtSDK installer hangs ?
If QtSDK installer hangs, use -style cleanlooks
command line option. For details, see here.
Which minimum version of GLIBC is needed to build Slicer ?
The minimum version of GLIBC required to build Slicer is defined by the minimum version required by the pre-compiler binaries used when building Slicer. In our case, a small pre-compiled executable called the CTK AppLauncher is downloaded and used at configure and build time each time python has to be invoked.
The precompiled CTKAppLauncher imposes the following requirements regarding GLIBC and GLIBCXX libraries installed on your system:
$ strings CTKAppLauncher | ack GLIBC GLIBC_2.2.5 GLIBCXX_3.4.11 GLIBCXX_3.4.9 GLIBCXX_3.4 GLIBC_2.3.3 GLIBC_2.3.2 GLIBC_2.4 GLIBC_2.3
To check that your system provides the required GLIBCXX and GLIB versions, you could run the following command and check that the requirement of the launcher can be satisfied:
$ strings /usr/lib/libstdc++.so.6 | grep GLIBCXX GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_3.4.14 GLIBCXX_3.4.15 GLIBCXX_3.4.16 GLIBCXX_3.4.17
$ strings /lib/libc.so.6 | grep GLIBC GLIBC_2.2.5 GLIBC_2.2.6 GLIBC_2.3 GLIBC_2.3.2 GLIBC_2.3.3 GLIBC_2.3.4 GLIBC_2.4 GLIBC_2.5 GLIBC_2.6 GLIBC_2.7 GLIBC_2.8 GLIBC_2.9 GLIBC_2.10 GLIBC_2.11
What to do if Visual Studio compiler crashes ?
If the compiler crashes on Windows saying "Microsoft C/C++ Compiler Driver has stopped working", then it's most probably due to long build folder paths. To fix this the Slicer build directory should be moved and/or renamed. A typical build folder path is C:\S4D
How to build Slicer with SSL support ?
To build Slicer with SSL support, you need to build (or download) Qt with SSL support and configure Slicer with -DSlicer_USE_PYTHONQT_WITH_OPENSSL:BOOL=ON
Why Qt 4 >= 4.8.5 should be used on Ubuntu 12.04 and above ?
See Slicer issue #3325
Why distributed CMake can not be used on Ubuntu 12.04 and above ?
- http://slicer-devel.65872.n3.nabble.com/PYTHON-INCLUDE-DIR2-when-building-Slicer4-td4028557.html
- Slicer issue #3103
- Slicer issue #3116
- CMake issue #14156
What is the ITKFactoryRegistration library ?
The ITKFactoryRegistration library ensures that no duplicated ITK IO factories are registered when CLI shared library modules are loaded. See Slicer issue #2813
Indeed, when ITKv4 is build shared, the library holding the factory registration code are build statically. As a consequence, when CLI modules are loaded as library the factory are registered multiple times. More than 800 factories were registered and this was leading to poor performance when loading images.
The introduction of a shared library named ITKFactoryRegistration (see r21592) that should be linked against to ensure loading of the factories is performed once. This approach requires user of ITK libraries to explicitly set the ITK variable ITK_NO_IO_FACTORY_REGISTER_MANAGER to 1 before calling include(${ITK_USE_FILE}).
Notes:
- Since calling include(${Slicer_USE_FILE}) already set ITK_NO_IO_FACTORY_REGISTER_MANAGER in the current scope, explicitly setting the variable afterward is not required.
How to configure network proxy ?
As explained here, proxy configured by setting http_proxy and https_proxy environment variables will automatically be used by CMake.