Difference between revisions of "Documentation/Nightly/Developers/Build Instructions"
m (→RUN Slicer)
|Line 31:||Line 31:|
Revision as of 03:14, 15 June 2013Home < Documentation < Nightly < Developers < Build Instructions
- 1 PREREQUISITES
- 1.1 Linux
- 1.2 MacOSX
- 1.3 Windows
- 2 CHECKOUT slicer source files
- 3 CONFIGURE and generate Slicer solution files
- 4 BUILD Slicer
- 5 RUN Slicer
- 6 Common errors
- 6.1 A tool returned an error code from "Generating vtksysProcessFwd9xEnc.c"
- 6.2 error: ‘class QList<QString>’ has no member named ‘reserve’
- 6.3 libarchive.so: undefined reference to `SHA256_Update'
- 6.4 A tool returned an error code from "Performing configure step for ..."
- 6.5 A tool returned an error code from "Performing download step (git clone) for ..."
- 6.6 No rule to make target `/usr/lib/x86_64-linux-gnu/libGL.so'
- 6.7 X11 Window errors at start time
- 6.8 error C2061: syntax error : identifier 'ssize_t'
- 6.9 ld: framework not found QtWebKit
- 6.10 On MacOSX 10.8, CMake hangs forever
- 7 Quick Build on Debian
As of early 2018, Slicer migrated to Qt5. Qt4 support was removed in version 4.11. See instructions at this labs page for the new requirements: https://www.slicer.org/wiki/Documentation/Labs/Qt5-and-VTK8
The prerequisites listed below are required to be able to configure/build/package/test Slicer.
- CMake >= 3.13.4
- Git >= 1.7.10
- Svn >= 1.7
- Qt 5.11: tested and recommended
- To build Slicer: install Qt using the distribution package manager.
- To package and redistribute Slicer: download and execute qt-unified-linux-x64-online.run, install Qt, make sure to select qtscript and qtwebengine components.
- GCC suite
- Debian squeeze/wheezy/testing(jessie) users, start by pasting the following lines in a terminal
sudo apt-get install subversion git-core git-svn sudo apt-get install build-essential libx11-dev libxt-dev libgl1-mesa-dev libosmesa6-dev libglu1-mesa-dev libfontconfig-dev libxrender-dev libncurses5-dev sudo apt-get install cmake sudo apt-get install qt-sdk
sudo apt-get install subversion git-core git-svn
sudo apt-get install make gcc g++ libx11-dev libxt-dev libgl1-mesa-dev libglu1-mesa-dev libfontconfig-dev libxrender-dev libncurses5-dev libxkbcommon-x11-0
sudo apt-get install libosmesa6-dev # Only for Ubuntu < 14.04.3
- For Qt5.5 on Ubuntu 16.04
sudo apt-get install libgstreamer-plugins-base0.10-dev
- Open a terminal and copy the command reported below
- Download stable version of CMake and extract the archive:
sudo apt-get install curl mkdir ~/Support && cd ~/Support curl -O https://cmake.org/files/v3.13/cmake-3.13.4-Linux-x86_64.tar.gz tar -xzvf cmake-3.13.4-Linux-x86_64.tar.gz
- Create symbolic links into
mkdir -p ~/bin for name in cmake ctest cpack ccmake cmake-gui; do ln -s ~/Support/cmake-3.13.4-Linux-x86_64/bin/$name ~/bin/$name done
See instructions reported in qt5-centos7/Dockerfile
- XCode command line tools must be installed:
- El Capitan is what most developers use.
- CMake 3.12.2 is recommended. Check the minimum required CMake version here
- Qt 5: tested and recommended.
MacOSX 10.9.4 (Mavericks)
(1) Make sure to install this update: http://support.apple.com/kb/DL1754
(2) Use CMake 3.12.2 - it is known to be working and is supported (if you want to use CMake already installed on your system, 126.96.36.199 is known to work on Mac OS X 10.9.5)
- Mac Os X >= 10.5 (Leopard)
- CMake >= 2.8.9
- For Mac Os X >= 10.8 (Mountain Lion) and/or recent XCode >= 4.5.X - CMake >= 2.8.11 is required. See http://www.cmake.org/files/v2.8/cmake-2.8.11-Darwin64-universal.tar.gz
$ curl -O http://www.cmake.org/files/v2.8/cmake-2.8.11-Darwin64-universal.tar.gz $ tar -xzvf cmake-2.8.11-Darwin64-universal.tar.gz --strip-components=1
$ CMake\ 2.8-11.app/Contents/bin/cmake --version cmake version 2.8.11
- Git >= 1.7.10
- Svn >= 1.7
- XCode (for the SDK libs)
- After installing XCode, install XCode command line developer tools:
- XQuartz - For Mac Os X >= 10.8 (Mountain Lion) install XQuartz (http://xquartz.macosforge.org) to get X11 (no longer a default in OS X).
- Qt 4 >= 4.8.5. We recommend you install the following two packages:
Mac OSX 10.11 (El Capitan)
XCode up to version 7 is known to work for Slicer compilation. XCode 8 breaks things on several levels for now. Remember to install XCode command line tools (see above) if a reinstall for XCode is needed.
The standard Qt4 installers fail on this version and the 4.8.6 source code won't build. But as described on the slicer-devel mailing list it is possible to install the homebrew version of qt4 which patches it to work on El Capitan (see below).
- Install the OS, Xcode, and XQuartz (see MacOSX 10.10 above)
- Install Qt4 by running the following two commands:
brew install qt4 xcode-select --install
- TCL does not build correctly on El Capitan as of 2015-12-03, so when building Slicer turn `Slicer_USE_PYTHONQT_WITH_TCL` off.
Mac OSX 10.12 (Sierra)
Similar to 10.11 (El Capitan), there are new issues with Qt4 (caused by Phonon). The GitHub user Cartr offered a patch to the brew team, and even though it was not integrated (the homebrew team decided to stop patching their recipe to encourage people to use Qt5), he turned his formula into a tap that can be installed (see below).
Follow instructions for 10.11 (Installing Xcode, XQuartz, run without TCL) but install Qt4 like shown below instead:
brew install cartr/qt4/qt xcode-select --install
Confirmed with Xcode:
- Version 8.1 (8B62) and cmake version 3.4.20151021-g8fbc8e
- Version 8.3.3 and cmake 3.5.2
Mac OSX 10.14 (Mojave)
Associated discussion topic is https://discourse.slicer.org/t/building-on-mac-10-14-mojave/4554/21
- Install Qt 5.11.2 using Qt Online Installer for macOS
- Install XCode:
- Build qt from homebrew
brew install qt ccmake -DCMAKE_OSX_DEPLOYMENT_TARGET=10.14 -DQt5_DIR=/usr/local//Cellar/qt/5.13.2/lib/cmake/Qt5 ~/slicer/latest/Slicer
- Explicitly set the SDK when running make
SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk make -j20
- CMake >= 3.13.4
- Git >= 1.7.10
- CMake must be able to find git.exe and patch.exe. If git is installed in the default location then they may be found there, but if they are not found then either add the folder that contains them to PATH environment variable; or set GIT_EXECUTABLE and Patch_EXECUTABLE as environment variables or as CMake variables at configure time.
- Subversion (SVN) client: any SVN client that has command line tools
- NSIS (optional): Needed if packaging Slicer - Click here to download. Make sure you install the language packs.
- Qt5: Download download Qt 5.10.0 installer from here and install Qt along with qtscript and qtwebengine components (5.10.x version is not available in the unified installer). For building with VS2015, Qt version 5.10.x or older is required (newer versions do not compile with VS2015 due to QWebEngine minimum requirement is VS2017). For more details, read step-by-step guide.
Tested and recommended build environment
- VS2015 (Visual Studio 14 2015 Win64)
- Make sure you enable installation of component Programming languages / Visual C++ / Common Tools for Visual C++ 2015 (in some distributions, this option is not enabled by default)
- Installation of Cumulative Servicing Release for Microsoft Visual Studio 2015 Update 3 (KB3165756) is required on some older VS2015 distributions
- Qt 5.10
- CMake >= 3.13.4
Experimental/deprecated build environments
- Visual Studio 2017 or 2019 (Community or any other edition) with VS2017 build tools (tested, works well)
- When configuring Visual Studio installer, enable installation of Visual Studio 2017 (v141) toolset
- Visual Studio 2017 toolset must be set in CMake: Optional toolset to use (argument to -T) need to be set to v141
- Most recent Qt versions can be used (tested with Qt-5.12.7)
- Visual Studio 2017 or 2019 (Community or any other edition) with VS2015 build tools (tested, works well)
- When configuring Visual Studio installer, enable installation of component VC++ 2015.3 v14.00 (v140) toolset for desktop
- Visual Studio 2015 toolset must be set in CMake: Optional toolset to use (argument to -T) need to be set to v140
- Cygwin (untested, probably does not work)
- Cygwin suite (building with cygwin gcc not supported, but the cygwin shell environment can be used to run git, svn, etc).
CHECKOUT slicer source files
Check out the code using
git and configure the
git svn bridge:
Clone the github repository
cd MyProjects git clone git://github.com/Slicer/Slicer.git
Slicerdirectory is automatically created after cloning Slicer.
Setup the development environment:
cd Slicer ./Utilities/SetupForDevelopment.sh
For more details see Development With Git.
On Windows enter the commands above in to a bash shell, such as Git Bash (part of msysgit) or use a Git client with a graphical user interface.
git svnbridge to ensure the mapping with svn revision.
git-svn is only required for core developers with svn access - other people can skip it.
cd Slicer git svn init http://svn.slicer.org/Slicer4/trunk git update-ref refs/remotes/git-svn refs/remotes/origin/master git checkout master git svn rebase
Note for Mac OSX El Capitan:
You might need to link SVN from XCode if you find that
git svn is broken. To get correct links and bypass El Capitan's SIP use these commands
sudo mkdir /Library/Perl/5.18/auto sudo ln -s /Applications/Xcode.app/Contents/Developer/Library/Perl/5.18/darwin-thread-multi-2level/SVN /Library/Perl/5.18/darwin-thread-multi-2level sudo ln -s /Applications/Xcode.app/Contents/Developer/Library/Perl/5.18/darwin-thread-multi-2level/auto/SVN /Library/Perl/5.18/auto/
If you plan to compile Slicer to develop your own extensions and test these extensions on Slicer releases, it is convenient to download the source code directly from SVN and specify the revision number corresponding to the release you want. To do so, replace <MARKER> and <SVNREVISION> in the command below with the selected revision and marker:
svn co http://svn.slicer.org/Slicer4/<MARKER> Slicer-r<SVNREVISION> -r <SVNREVISION>
Release SVN revision# Marker 4.10.0 27501 trunk 4.8.1 26813 branches/Slicer-4-8 4.8.0 26489 trunk 4.6.2 25516 branches/Slicer-4-6 4.5.0-1 24735 trunk 4.4 23774 trunk 4.3.1 22599 branches/Slicer-4-3 4.3.0 22408 trunk
More corresponding SVN revision numbers can be found here and here. The <MARKER> can be found at the bottom of this page http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&revision=SVNREVISION by replacing SVNREVISION with the selected revision.
For example, to checkout the source code associated with revision 4.8.1, you would use the following command:
svn co http://svn.slicer.org/Slicer4/branches/Slicer-4-8 Slicer-r26813 -r 26813
CONFIGURE and generate Slicer solution files
There are many ways of customizing Slicer's user interface or feature set. This section describes how a custom Slicer build can be configured at build-time. See an overview of various other options in this presentation.
You can configure and generate Slicer solution files using either
cmake-gui. To streamline this process, you can also use the SlicerCustomAppTemplate project maintained by Kitware.
Customizing application build
Customized editions of Slicer can be generated without changing Slicer source code, just by modifying CMake variables:
- SlicerApp_APPLICATION_NAME: Custom application name to be used, instead of default "Slicer". The name is used in installation package name, window title bar, etc.
- Slicer_DISCLAIMER_AT_STARTUP: String that is displayed to the user after first startup of Slicer after installation (disclaimer, welcome message, etc).
- Slicer_DEFAULT_HOME_MODULE: Module name that is activated automatically on application start.
- Slicer_DEFAULT_FAVORITE_MODULES: Modules that will be added to the toolbar by default for easy access. List contains module names, separated by space character.
- Slicer_CLIMODULES_DISABLED: Built-in CLI modules that will be removed from the application. List contains module names, separated by semicolon character.
- Slicer_QTLOADABLEMODULES_DISABLED: Built-in Qt loadable modules that will be removed from the application. List contains module names, separated by semicolon character.
- Slicer_QTSCRIPTEDMODULES_DISABLED: Built-in scripted loadable modules that will be removed from the application. List contains module names, separated by semicolon character.
- Slicer_USE_PYTHONQT_WITH_OPENSSL: enable/disable building the application with SSL support (ON/OFF)
- Slicer_USE_SimpleITK: enable/disable SimpleITK support (ON/OFF)
- Slicer_BUILD_SimpleFilters: enable/disable building SimpleFilters. Requires SimpleITK. (ON/OFF)
- Slicer_BUILD_EMSegment: enable/disable building EM segmenter (ON/OFF)
- Slicer_USE_PYTHONQT_WITH_TCL: TCL support (ON/OFF)
- Slicer_EXTENSION_SOURCE_DIRS: Defines additional extensions that will be included in the application package as built-in modules. Full paths of extension source directories has to be specified, separated by semicolons.
Recommended: run CMake (cmake-gui) from the Windows Start menu
- Set the build directory. Use a very short path, for example:
C:\D\S4for source code and for
C:\D\S4Dbuild directory are known to work.
- Because Windows doesn't support file path longer than 260 characters and has a maximum command line length, it is strongly recommended to choose a build directory that is no longer than 10 characters. If a longer path is used then build may or may not succeed.
- You cannot use the same build tree for both release or debug mode builds. If both build types are needed, then the same source directory can be used, but a separate build directory should be created and configured for each build type.
- Select your compiler: Visual Studio 14 2015 Win64
- Do not configure yet.
Qt5_DIRvariable pointing to Qt5 folder such as
C:\Qt\5.10.0\msvc2015_64\lib\cmake\Qt5: click Add entry button, set Name to Qt5_DIR, Type to PATH, and Value to the Qt5 folder.
- Click generate then close cmake-gui.
- If building in release mode:
- Open the top-level Slicer.sln file in the build directory in Visual Studio
- Set active configuration to Release. Visual Studio will select Debug build configuration by default when you first open the solution in the Visual Studio GUI. If you build Slicer in release mode and accidentally forget to switch the build configuration to Release then the build will fail. Note: you can avoid this manual configuration mode selection by setting
- If building in debug mode:
- Start Visual Studio using the Slicer launcher as described in Step-by-step debug instuctions
- Build the ALL_BUILD project
Alternative option: Configure and build using command-line or batch file
Instead of using CMake (cmake-gui), it is also possible to configure by creating a .bat file that contains command-line instructions and run this .bat file each time a Slicer needs to be re-built. The examples below assume Slicer source code is in
C:\D\S4 folder and Qt-5.10 is installed in default location.
Visual Studio 2015 in Release mode:
mkdir C:\D\S4R cd /d C:\D\S4R "C:\Program Files\CMake\bin\cmake.exe" -G "Visual Studio 14 2015 Win64" -DQt5_DIR:PATH=C:\Qt\5.10.0\msvc2015_64\lib\cmake\Qt5 C:\D\S4 "C:\Program Files\CMake\bin\cmake.exe" --build . --config Release
Visual Studio 2015 in Debug mode:
mkdir C:\D\S4D cd /d C:\D\S4D "C:\Program Files\CMake\bin\cmake.exe" -G "Visual Studio 14 2015 Win64" -DQt5_DIR:PATH=C:\Qt\5.10.0\msvc2015_64\lib\cmake\Qt5 C:\D\S4 "C:\Program Files\CMake\bin\cmake.exe" --build . --config Debug
Visual Studio 2017 with VS2015 toolset in Release mode:
mkdir C:\D\S4R cd /d C:\D\S4R "C:\Program Files\CMake\bin\cmake.exe" -G "Visual Studio 15 2017 Win64" -T "v140" -DQt5_DIR:PATH=C:\Qt\5.10.0\msvc2015_64\lib\cmake\Qt5 C:\D\S4 "C:\Program Files\CMake\bin\cmake.exe" --build . --config Release
- Configure using the following commands. By default CMAKE_BUILD_TYPE is set to Debug.
mkdir Slicer-SuperBuild-Debug cd Slicer-SuperBuild-Debug cmake -DCMAKE_BUILD_TYPE:STRING=Debug -DQt5_DIR:PATH=/path/to/Qt5.11.0/5.11.0/gcc_64/lib/cmake/Qt5 ../Slicer
where you replace /path/to/QtSDK with the real path on your machine where QtSDK is located
If using Qt from the system, do not forget to add the following CMake variable to your configuration command line:
- Instead of
cmake, you can use
cmake-guito visually inspect and edit configure options.
- Using top-level directory name like
- Step-by-step debug instuctions
- On Mac OS X 10.9 (Mavericks) / 10.10 (Yosemite) / 10.11 (El Capitan), also set the following variables (see discussion):
|CMAKE_OSX_DEPLOYMENT_TARGET||10.9 or 10.10 or 10.11|
Two projects are generated by either
One of them is in the top-level bin directory
Slicer-SuperBuild and the other one is in the subdirectory
- The first project in
Slicer-SuperBuildmanages all the external dependencies of Slicer (VTK, ITK, Python, ...). To build Slicer for the first time, run make (or build the solution file in Visual Studio) in
Slicer-SuperBuild, which will update and build the external libraries and if successful will then build the subproject Slicer-build.
- The second project in
Slicer-SuperBuild/Slicer-buildis the "traditional" build directory of Slicer. After local changes in Slicer (or after an svn update on the source directory of Slicer), only running make (or building the solution file in Visual Studio) in
Slicer-SuperBuild/Slicer-buildis necessary (the external libraries are considered built and up to date).
- Warning: An significant amount of disk space is required to compile Slicer in Debug (>10GB on Windows)
Workaround for if the firewall is blocking git protocol
- Some firewalls will block the git protocol. A possible workaround is to configure Slicer by disabling the option
Slicer_USE_GIT_PROTOCOL. Then the http protocol will be used instead. Consider also reading https://github.com/commontk/CTK/issues/33
After configuration, start the build process in the
|Linux or MacOSX (Makefile)||Windows (Visual Studio)|
Start a terminal.
$ cd ~/Projects/Slicer-SuperBuild $ make -j<NUMBEROFCORES>
When using the -j option, the build will continue past the source of the first error. If the build fails and you don't see what failed, rebuild without the -j option. Or, to speed up this process build first with the -j and -k options and then run plain make. The -k option will make the build keep going so that any code that can be compiled independent of the error will be completed and the second make will reach the error condition more efficiently.
Start Windows Explorer. Need help?
If you make local changes to Slicer, open the solution file located in the directory
|Linux or MacOSX||Windows|
Start a terminal.
Start Windows Explorer. Need help?
- Linux Ubuntu: if you have odd rendering artifacts, try disabling visual effects (System/Appearance/Visual Effects)
- Windows: If build was OK, but it Slicer doesn't start (gives the error: [bin/Release/SlicerQT-real.exe] exit abnormally - Report the problem.) then one possible root cause is that you have a copy of Python26.dll in your windows system directory (e.g., c:\Windows\System32\python26.dll). The solution is to rename or remove the python dll in the system directory. See more details here: http://www.na-mic.org/Bug/view.php?id=1180
A tool returned an error code from "Generating vtksysProcessFwd9xEnc.c"
The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail. Project : error PRJ0019: A tool returned an error code from "Generating vtksysProcessFwd9xEnc.c"
Install SP1 of Visual Studio
error: ‘class QList<QString>’ has no member named ‘reserve’
/nfs/Users/blowekamp/QtSDK/Desktop/Qt/474/gcc/include/QtCore/qdatastream.h: In function ‘QDataStream& operator>>(QDataStream&, QList<T>&) [with T = QString]’: /nfs/Users/blowekamp/QtSDK/Desktop/Qt/474/gcc/include/QtCore/qstringlist.h:247: instantiated from here /nfs/Users/blowekamp/QtSDK/Desktop/Qt/474/gcc/include/QtCore/qdatastream.h:246: error: ‘class QList<QString>’ has no member named ‘reserve’
You have multiple Qt versions installed on your machine. Try removing the Qt version installed on the system.
libarchive.so: undefined reference to `SHA256_Update'
Linking CXX executable ../../../../../bin/MRMLLogicCxxTests /home/benjaminlong/work/slicer/Slicer-SuperBuild-Debug/LibArchive-install/lib/libarchive.so: undefined reference to `SHA256_Update' /home/benjaminlong/work/slicer/Slicer-SuperBuild-Debug/LibArchive-install/lib/libarchive.so: undefined reference to `SHA256_Final' /home/benjaminlong/work/slicer/Slicer-SuperBuild-Debug/LibArchive-install/lib/libarchive.so: undefined reference to `SHA256_Init' /home/benjaminlong/work/slicer/Slicer-SuperBuild-Debug/LibArchive-install/lib/libarchive.so: undefined reference to `MD5_Init'
cd Slicer-SuperBuild rm -rf LibArchive-* make -j4
A tool returned an error code from "Performing configure step for ..."
CMake has some problems building complex projects on Windows7. See more details in: http://cmake.org/Bug/view.php?id=12957
A fix has been already identified and soon will be available in an official CMake release (probably 2.8.8). Until then this unofficial version can be used (based on CMake-2.8.7): https://qshare.queensu.ca/Users01/lasso/public/cmake-188.8.131.5257-win32-x86.exe.
A tool returned an error code from "Performing download step (git clone) for ..."
CMake has problems cloning git repositories on Windows7. See more details in http://cmake.org/Bug/view.php?id=12564
If you think the described problem is the same as you have, please add your specific error message to the bug report (the more people report the problem the sooner it will be fixed).
No rule to make target `/usr/lib/x86_64-linux-gnu/libGL.so'
X11 Window errors at start time
X Error: BadWindow (invalid Window parameter) 3 Extension: 137 (Uknown extension) Minor opcode: 4 (Unknown request) Resource id: 0x4200199 X Error: BadWindow (invalid Window parameter) 3 Extension: 137 (Uknown extension) Minor opcode: 4 (Unknown request) Resource id: 0x42001a6 X Error: BadWindow (invalid Window parameter) 3 Extension: 137 (Uknown extension) Minor opcode: 4 (Unknown request) Resource id: 0x42001b3
- Reinstall Nvidia drivers (that also rewrite the xorg.conf file).
error C2061: syntax error : identifier 'ssize_t'
4>1>Compiling... 4>1>version.c 4>1>c:\chene\winbin64\slicer4\cmcurl\urldata.h(585) : error C2061: syntax error : identifier 'ssize_t' 4>1>c:\chene\winbin64\slicer4\cmcurl\urldata.h(593) : error C2365: 'fread' : redefinition; previous definition was 'function' 4>1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(248) : see declaration of 'fread' 4>1>c:\chene\winbin64\slicer4\cmcurl\urldata.h(610) : error C2059: syntax error : '}'
ld: framework not found QtWebKit
[...] Linking CXX shared library libPythonQt.dylib ld: framework not found QtWebKit clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [libPythonQt.dylib] Error 1 [...]
See Slicer issue #2860
- Use a recent nightly build of CMake. It includes patch cc676c3a. Note also that the coming version of CMake 2.8.11 will work as expected.
On MacOSX 10.8, CMake hangs forever
Solution: Use CMake build >= 184.108.40.20630220-g53b279. See http://www.cmake.org/files/dev/cmake-220.127.116.1130220-g53b279-Darwin-universal.tar.gz
CMake folks (Thanks Brad King :)) fixed an issue that was preventing the most recent nightly from being used to successfully compile Slicer. The fix has been tested and is known to work. Tomorrow nightly build of CMake and by extension the coming release of CMake 2.8.11 will work.
If you are curious about the details, check the commit message:
The associated CMake test have also been updated:
Quick Build on Debian
sudo aptitude update sudo aptitude install subversion git gcc g++ make cmake-curses-gui libqt4-dev svn co http://svn.slicer.org/Slicer4/trunk Slicer mkdir Slicer-SuperBuild-Debug cd Slicer-SuperBuild-Debug cmake ../Slicer make -j5 # runtime dependency: sudo aptitude install python-tk