Back to
main page.
A HOWTO for the compilation and installation of the Ubitrack library
This page contains useful instructions to compile and install the Ubitrack libraries to be used in VisualStudio
Requirements
See also README.txt in checkout's top level folder for more recent requirements
Mandatory
- Ubitrack source code from our SVN repository:
https://<login>@camplinux.in.tum.de/ubitrack/trunk
Use the guest
account for anonymous read-only access. guest
account is not available at the moment.
- C++ (g++ 3.3 or higher, MSVC 7.1 or higher)
- Python, required by SCons (http://www.python.org), Version <= 2.7.x (newer Versions of Pyhton are not compatible at the moment)
- SCons, the build system (version 1.0 or higher, http://www.scons.org/)
- Boost (version 1.36 or higher) (http://www.boost.org)
A variety of precompiled Windows libraries can be found at http://www.boostpro.com
Some precompiled boost versions can be found from the pcl:http://pointclouds.org/downloads/windows.html
Alternatively we offer the following precompiled versions of Boost:
Optional
- Windows Platform SDK, required for the new DirectShowFrameGrabber Windows SDK for Windows Server 2008 and .NET Framework 3.5
- LAPACK, required for most of the exciting math stuff.
Note: For Win32, a compiled lapack version is supplied with this library.
- OpenCV, for marker tracking and other vision stuff. If you do not like to compile the library by your own, use the compiled version OpenCV-2.1.0-win32-vs2008.exe.
- FFmpeg, Unofficial windows binaries http://ffmpeg.arrozcru.org/builds
- freeglut (for demo only)
- libcurl, required for database client library
- Sun Java SE Development Kit (JDK) 6, required for the Java bindings
- SWIG, required for the Java bindings
- Coin3D, 3D Rendering
- GLEW provides efficient run-time mechanisms for determining which OpenGL extensions are supported on the target platform.
- DSVideoLib (DirectShowVideoLibrary) A wrapper supporting concurrent access to framebuffers from multiple threads. Useful for developing applications that require live video input from a variety of capture devices (frame grabbers, IEEE-1394 DV camcorders, USB webcams).
Build Instructions
General Steps
- Scons User and Installation Guide, if there are problems with the installation
- scons command line options:
scons OPENCV_PATH=XXX BOOST_PATH=XXX all install-all
- scons remembers the command line options, so you don't have to write them again and again.
- HINT: type
scons --help
to see command line options
- HINT: type
scons -h
to see all (cached) variables
- HINT: type
scons --config=force
to recheck the dependencies, not using the cached variables
- HINT: Use the
-k
option to not stop on errors. All the rest then also gets compiled
- HINT: Use the
-j x
option to use multiple processors, where x is the number of threads. if your computer has 2 processors set x to 4.
- HINT:
scons -c
to clean the built, helpes sometimes with compilation problems.
- HINT: deleting the
.sconf_temp
directory and the file .sconsign.dblite
, will also help with some compilation problems.
- In the file
config.cache
there are the cached scons command line options
- HINT: type
scons FORCE_MSVC_VERSION = '9.0'
to force scons to use Visual Studio 9.0 (also works with other versions)
- HINT: add different outputprefixes with the option
PREFIX=XXX
to seperate release and debug versions
- HINT: to compile a debug version add the option
RELEASE_BUILD=false
otherwise set RELEASE_BUILD=true
Combine this with the PREFIX
option (see above). For example scons PREFIX=release RELEASE_BUILD=true
and scons PREFIX=debug RELEASE_BUILD=false
- HINT: use the option
TARGET_ARCH="x86"
to force 32-bit compilation or TARGET_ARCH="x86_64"
to force the 64-bit compilation (windows only feature)
- HINT: when using
'install-all'
scons will install ubi in the directory specified in PREFIX
otherwise it will be built in build/rls (build/dbg)
- Check that everything works:
scons test
- Now look at the
release/bin
and release/lib
folders (or debug/bin
and debug/lib
for the debug-version)
- If the DirectShowFrameGrabber is needed, install the new Windows SDK for Windows Server 2008 and .NET Framework 3.5
- To build the library, simply enter in the main directory:
scons OPENCV_PATH=XXX BOOST_PATH=XXX PREFIX=XXX RELEASE_BUILD=XXX all install-all
- Scons supports the following options:
scons [BUILD_OPTION=value] ... [targets]
- Currently we support the following targets:
(none) | build only the ubitrack library |
drivers | build the drivers |
demos | build demos |
vision | build vision library and components |
dbclient | build the database client library |
all | build all libraries, drivers and demo applications |
install | copy the library files to the directory given by PREFIX (see below) |
java-bindings | build java wrapper |
install-drivers | copy the drivers to the install directory |
install-vision | install vision library and components |
install-dbclient | install the database client library |
install-all | copy libraries and drivers to install directory |
install-java-bindings | install java wrapper |
test | build and run unit tests |
vcproj | create visual studio project files |
- The following build options are available. Enter
scons -h
in the top directory for more explanations and default values.
You only need to set a build option once and its value will be remembered in config.cache until you specify a new value.
PREFIX | directory where the libraries will be installed. |
RELEASE_BUILD | Builds an optimized verion when set to 'true'. Set to 'true' by default. |
TARGET_ARCH | Flag for choosing 32 bit ("x86") or 64 bit ("x86_64") compilation. Set to "x86" by default. |
BOOST_PATH | Path to the boost library |
BOOST_INCLUDE | Path to the boost headers (overrides BOOST_PATH) |
BOOST_LIBS | Path to the boost libraries (overrides BOOST_PATH) |
GLUT_PATH | Path to the glut library (only for demo application) |
GLUT_INCLUDE | Path to the glut headers (overrides GLUT_PATH) |
GLUT_LIBS | Path to the glut libraries (overrides GLUT_PATH) |
GLEW_PATH | Path to the glew library |
GLEW_INCLUDE | Path to the glew headers (overrides GLEW_PATH) |
GLEW_LIBS | Path to the glew libraries (overrides GLEW_PATH) |
OPENCV_PATH | Path to the OpenCV library |
OPENCV_INCLUDE | Path to the OpenCV headers (overrides OPENCV_PATH) |
OPENCV_LIBS | Path to the OpenCV libraries (overrides OPENCV_PATH) |
CURL_PATH | Path to the curl library |
CURL_INCLUDE | Path to the curl headers (overrides CURL_PATH) |
CURL_LIBS | Path to the curl libraries (overrides CURL_PATH) |
JAVA_HOME | Path to default Sun Java SE Development Kit (Can also be specified as a normal system environment variable. Under most circumstances, the build system can derive this information automatically from the location of 'javac', so you should try without setting this variable, first. Under all circumstances, 'javac' has to be in the system path. This variable does not work on Mac since there is no default JDK, everything should work automatically there.) |
SWIGCOM | Path to swig binary (should be detected automatically), e.g. SWIG_PATH=C:\MYSWIGPATH\swigwin.exe. ATTENTION: Since Scons 1.0, SWIG_PATH is deprecated |
SWIG_PATH | Path to swig include directory (should be detected automatically) |
FAROSDK_PATH | Path to the CmmSpecific?.h file within the FARO USB Arm 5 SDK |
INTERSENSESDK_PATH | Path to the isense.h and isense.c file within the InterSense? SDK Directory |
DSVIDEOLIB_PATH | Path to the sources of dsvideolib |
TISCH_PATH | Path to the libtisch |
FORCE_MSVC_VERSION | Forces scons to use a certain MS Visual Studio Version (e.g. FORCE_MSVC_VERSION=7.1) |
- To build files in and below a certain directory for which no explicit target exists, go to that directory and enter
scons -U
.
- For example to build a release library and put the library files in the subdirectory
release
with the OpenCV directory C:\Programme\OpenCV
and the Boost installed in C:\Programme\boost\boost_1_34_1
type:
scons OPENCV_PATH=C:\Programme\OpenCV BOOST_PATH=C:\Programme\boost\boost_1_34_1 PREFIX=release RELEASE_BUILD=true all install-all
- To build a debug version with the same OpenCV and Boost directories in the subdirectory
debug
type:
scons OPENCV_PATH=C:\Programme\OpenCV BOOST_PATH=C:\Programme\boost\boost_1_34_1 PREFIX=debug RELEASE_BUILD=false all install-all
- HINT:
scons -c
to clean the built, helpes sometimes with compilation problems
- Check that everything works:
scons test
- Now look at the
release/bin
and release/lib
folders (or debug/bin
and debug/lib
for the debug-version)
Some Hints for the Mac
- Use MacPorts (http://trac.macosforge.org/projects/macports/wiki) to get a mac version of Scons, Boost and OpenCV. MacPorts somtimes s... so try to reinstall the (dependent) packages
- To optional Java bindings, you also need swig and swig-java from MacPorts. You might have to announce this version to Scons by setting the SWIGPATH scons variable, e.g. by setting SWIGPATH = '/opt/local/bin/swig' in file config.cache in the Ubitrack build directory.
- Edit Path analoge to: export DYLD_LIBRARY_PATH=~/SharedFolder/UNI/UbiTrack/lib:~/SharedFolder/UNI/UbiTrack/lib/ubitrack
- If you use MacPorts and you have problems with the md5 module of python, try to install py25-hashlib
- In case library checks fail, you might have to change the target platform. It is configured statically in the SConstruct file which resides in the Ubitrack base directory. Just grep for 'darwin'. For a 64 bit system, the 'x86_64' flag should be sufficent. If no platform flag is specified, scons will detect it automatically. Maybe, this should be the default way to handle this!
Checking that it works
Connect a video camera, print out
doc/misc/Marker-Cube.pdf
, go into the
doc/utql
directory and type
utConsole ExampleRenderMarker.utql
A windows should appear with the camera image, showing a snowman overlaid on one of the markers.
Note: This only works if Ubitrack was compiled with OpenCV and Freeglut.
Configure VisualStudio
- To use the new Windows Platform SDK libraries, you have to change the library and include directories in VisualStudio (remove old Platform-SDK-Directories):
- In "Tools" -> "Options...", "Projects and Solutions" -> "VC++ Directories" remove the old Platform-SDK-Include-Directory "$(VCInstallDir)PlatformSDK\Include" and add to the "Include files" the path to your new Windows Platform SDK includes "C:\Programme\Microsoft SDKs\Windows\v6.1\Include"
- In "Extra" -> "Options...", "Projects and " -> "VC++ Directories" remove the old Platform-SDK-Library-Directory "$(VCInstallDir)PlatformSDK\Lib" and add to the "Library files" the path to your new Windows Platform SDK libraries "C:\Programme\Microsoft SDKs\Windows\v6.1\Lib"
- Go to the project properties
- In "C/C++" -> "General": Add your Ubitrack include path
C:\[...]\UbiTrack\src
to the "Additional Include Directories"
- In "Linker" -> "General": Add your Ubitrack library path
C:\[...]\UbiTrack\release\lib
to the "Additional Library Directories"
- In "Linker" -> "Input": Add
ubitrack.lib
to the "Additional Dependencies"
Common Build Problems
Please see the
Ubitrack FAQ? for many common compile problems.
Using the Visual Studio 2008
Install the latest Windows SDK (v6.1), otherwise it will not work.
When using the Visual Studio 2008 scons will eventually not find the include and libs of the compiler suite.
So you have to specify the following paths per hand
- Include:
- Visual Studio 2008 directory: C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\include
- Windows SDK: C:\\Program Files\\Microsoft SDKs\\Windows\\v6.1\\include
- atl header: C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\atlmfc\\include
- Libs:
- Visual Studio 2008 : C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\lib
- Windows SDK: C:\\Program Files\\Microsoft SDKs\\Windows\\v6.1\\Lib
- atl libs: C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\atlmfc\\lib
scons LIBS=C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\lib; <CR>
C:\\Program Files\\Microsoft SDKs\\Windows\\v6.1\\Lib;C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\atlmfc\\lib <CR>
INCLUDE =C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\include; C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\atlmfc\\include <CR>
c:\\Program Files\\Microsoft SDKs\\Windows\\v6.1\\Include
Compiling the DirectShowFrameGrabber
On some Windows Systems the DirectShowFrameGrabber might not compile without a trick. When it does not compile try:
LAPACK Problems on Linux
On some Linux distributions (e.g. Debian) you will see the following lines, which indicate that LAPACK was not found:
Checking for dgesvd_() in C library lapack... no
Checking for dgesvd() in C library lapack... no
First of all, make sure that the LAPACK and BLAS libraries are installed on your system. If this is the case, then most likely, the libraries have distribution-specific names. You can adapt them by changing the
LAPACK_LIBS
variable. E.g. on debian you might get lucky with the following setting:
scons LAPACK_LIBS=lapack-3:blas-3
On Ubuntu 9.04, blas depends on libgfortran, which however only exists in terms of
libgfortran.so.3
. In this case, a symlink helps
ln -s /usr/lib/libgfortran.so.3 /usr/lib/libgfortran.so
Library Problems on Linux
If the scons check for an installed library fails with the following lines
Checking for glutInitWindowSize( 800, 600 ) in C++ library freeglut... no
Checking for glutMainLoopEvent() in C++ library glut... no
although you are sure that it is installed properly and also that its path is configured properly (see
build instructions above) then you might suffer from the following problem:
Depending on the Linux distribution, libraries have slightly different names. E.g. on Ubuntu 8.10, there is no
libGL.so
but a
libGL.so.1
symlink pointing to the actually installed library
libGL.so.177.82
(depending on the nvidia driver version). This is just an example. scons, however, expects libraries to have the canonical name,
libGL.so
in this case. You might have to add a corresponding symlink manually.
A look into the
config/glut
build script reveals that additional libraries
libGL.so
and
libGLU.so
are required on Linux:
glut_options[ 'LIBS' ] = [ 'GLU', 'GL' ]
If they cannot be found by scons for the reason just described, then the check will fail without further notice. It is
not sufficient that
libglut.so
and
GL/freeglut.h
are available in the configured paths, as suggested by the following lines of code, also from
config/glut
.
elif conf.CheckLibWithHeader( "glut", "GL/freeglut.h", "C++", "glutMainLoopEvent();", 0 ):
glut_options[ 'LIBS' ] = [ 'glut' ] + glut_options.get( 'LIBS', [] )
have_freeglut = True
Boost Problems on 64-Bit Linux
Boost 1.35 for 64 bit systems contains a bug which leads to error messages similar to the following
g++ -o build/rls/src/Vision/Undistortion.os -c -pthread -Wall -O3 -fPIC "-DBOOST_UBLAS_BOUNDED_ARRAY_ALIGN=__attribute__ ((aligned (16)))" -DTIXML_USE_STL -I3rd/asio -I3rd/boost-bindings -I/usr/include/opencv -I3rd/tinyxml -I3rd/log4cpp/include -Isrc src/Vision/Undistortion.cpp
In file included from src/Ubitrack/Measurement/Measurement.h:37,
from src/Ubitrack/Util/CalibFile.h:39,
from src/Vision/Undistortion.cpp:32:
/usr/include/boost/serialization/vector.hpp:185: error: redefinition of 'struct boost::serialization::implementation_level<std::vector<long int, std::allocator<long int> > >'
/usr/include/boost/serialization/vector.hpp:185: error: previous definition of 'struct boost::serialization::implementation_level<std::vector<long int, std::allocator<long int> > >'
/usr/include/boost/serialization/vector.hpp:185: error: redefinition of 'struct boost::serialization::implementation_level<std::vector<long unsigned int, std::allocator<long unsigned int> > >'
/usr/include/boost/serialization/vector.hpp:185: error: previous definition of 'struct boost::serialization::implementation_level<std::vector<long unsigned int, std::allocator<long unsigned int> > >'
scons: *** [build/rls/src/Vision/Undistortion.os] Error 1
scons: building terminated because of errors.
Use boost >=1.36. See also
http://bugs.gentoo.org/show_bug.cgi?id=231259.
Don't forget to install package libboost-math1.37-dev. At least on Ubuntu 9.04, its not installed automatically when requesting package libboost-1.37-dev.
Swig C# - Missing arrays_csharp.i
At least on Ubuntu 9.04 coming with swig 1.3, the typemap file
arrays_charp.i
is missing. Download it from
here and copy it to your
/usr/share/swig1.3/csharp/
directory.
This error also occurs on Max OSX 10.5 with and without mac ports. Copy the file to
/usr/share/swig/<version>/csharp/
directory.
Linux (Ubuntu 12.04 LTS)
- Install GCC etc: "apt-get install build-essential" (sollte abgefragt werden)
- Install Scons: "apt-get install scons"
- Install LAPACK library: "apt-get install liblapack-dev"
- Install Boost: "apt-get install libboost1.46-all-dev"
- Install OpenCV?: "apt-get install libopencv-dev"
- Install Translation Package for libcv-dev: "apt-get install libcv-dev"
- Install Parallelism lib: "apt-get install libtbb-dev"
- Install FreeGLUT?: "apt-get install freeglut3-dev"
- Install HighGUI? lib: "apt-get install libhighgui-dev" (lib muss noch in scons abgefragt werden)
- create the file "config.cache" and add: ("lapack" als liboption in "modules/utcore/config/01lapack", "opencv_imgproc" als liboption in "modules/utvision/config/opencv", "glut" als liboption in "modules/utvisualization/config/glut")
- LAPACK_LIBS="/usr/lib/lapack"