Difference between revisions of "Documentation/Nightly/Developers/FAQ/Building"

From Slicer Wiki
Jump to: navigation, search
Line 112: Line 112:
 
== What is the ITKFactoryRegistration library ? ==
 
== What is the ITKFactoryRegistration library ? ==
  
This library ensures that no duplicated ITK IO factories are registered when CLI shared library modules are loaded.
+
The <tt>ITKFactoryRegistration</tt> library ensures that no duplicated ITK IO factories are registered when CLI shared library modules are loaded.
  
 
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.
 
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 <tt>ITKFactoryRegistration</tt> (see [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&revision=21592 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 <tt>ITK_NO_IO_FACTORY_REGISTER_MANAGER</tt> to <tt>1</tt> before calling <tt>include(${ITK_USE_FILE})</tt>.
 
The introduction of a shared library named <tt>ITKFactoryRegistration</tt> (see [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&revision=21592 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 <tt>ITK_NO_IO_FACTORY_REGISTER_MANAGER</tt> to <tt>1</tt> before calling <tt>include(${ITK_USE_FILE})</tt>.

Revision as of 16:44, 1 May 2019

Home < Documentation < Nightly < Developers < FAQ < Building


For the latest Slicer documentation, visit the read-the-docs.


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 ?

What is the ITKFactoryRegistration library ?

The ITKFactoryRegistration library ensures that no duplicated ITK IO factories are registered when CLI shared library modules are loaded.

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}).