Compiling from source¶
You may want to build Open3D from source if you are developing Open3D, want to
get the latest features in the master
branch, or if the OS or Python
versions are not covered by Open3D’s pre-built Python packages from PyPI and
Conda.
System requirements¶
Ubuntu 18.04+: GCC 5+, Clang 7+
macOS 10.14+: XCode 8.0+
Windows 10 (64-bit): Visual Studio 2019+
Cloning Open3D¶
Make sure to use the --recursive
flag when cloning Open3D.
git clone --recursive https://github.com/intel-isl/Open3D
Ubuntu¶
1. Install dependencies (optional)¶
Optionally, dependencies can be installed prior to building Open3D to reduce compilation time. Otherwise, the dependencies can also be build from source, see Dependencies.
util/scripts/install-deps-ubuntu.sh
2. Setup Python binding environments¶
This step is only required if Python support for Open3D is needed. We use pybind11 for the Python binding. Please refer to pybind11 document page when running into Python binding issues.
2.1 Select the right Python executable¶
All we need to do in this step is to ensure that the default Python in the
current PATH
is the desired one. Specifically,
For pip virtualenv, activate it by
source path_to_my_env/bin/activate
.For Conda virtualenv, activate it by
conda activate my_env
.For the system’s default Python (note:
sudo
may be required for installing Python packages), no action is required.
Finally, check
which python
python -V
to make sure that the desired Python binary is used. During the CMake config
step (when running cmake ..
), check the printed message indicating
Found PythonInterp
. E.g. the line may look like this:
-- Found PythonInterp: /your/path/to/bin/python3.6 (found version "3.6.6")
Alternatively, CMake flag -DPYTHON_EXECUTABLE=/path/to/my/python
can be set to force CMake to use the specified Python executable.
2.2 Jupyter visualization widgets support (experimental)¶
Since version 0.4.0
, we added experimental support for Jupyter
visualization. To enable Jupyter visualization support, install
npm. If npm
is not
installed, Jupyter visualization support will not be enabled, however the rest of
the Python bindings will still work.
To check the installation:
node -v
npm -v
Tip
We recommended using modern versions of node
and npm
. Warning
message will be printed if the node
or npm
versions are too old for
the node packages that the Jupyter visualizer depends on.
Please refer to
the official documentation
on how to upgrade to the latest version.
Warning
Jupyter notebook visualization with OpenGL is still experimental Expect to see bugs and missing features.
2.3 Disable Python binding¶
If Python binding is not needed, it can be turned off by setting the following
compilation options to OFF
:
BUILD_PYBIND11
BUILD_PYTHON_MODULE
3. Config¶
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=<open3d_install_directory> ..
The CMAKE_INSTALL_PREFIX
argument is optional and can be used to install
Open3D to a user location. In the absence of this argument Open3D will be
installed to a system location (sudo required). For more customizations of the
build, please see Compilation Options.
Note
Importing Python libraries compiled with different CXX ABI may cause segfaults in regex. https://stackoverflow.com/q/51382355/1255535. By default, PyTorch and TensorFlow Python releases use the older CXX ABI; while when they are compiled from source, newer ABI is enabled by default.
When releasing Open3D as a Python package, we set
-DGLIBCXX_USE_CXX11_ABI=OFF
and compile all dependencies from source,
in order to ensure compatibility with PyTorch and TensorFlow Python releases.
If you build PyTorch or TensorFlow from source or if you run into ABI compatibility issues with them, please:
Check PyTorch and TensorFlow ABI with
import torch import tensorflow print(torch._C._GLIBCXX_USE_CXX11_ABI) print(tensorflow.__cxx11_abi_flag__)
Configure Open3D to compile all dependencies from source with the corresponding ABI version obtained from step 1.
After installation of the Python package, you can check Open3D ABI version with:
import open3d
print(open3d.open3d._GLIBCXX_USE_CXX11_ABI)
4. Build¶
# On Ubuntu
make -j$(nproc)
# On macOS
make -j$(sysctl -n hw.physicalcpu)
5. Install¶
5.1 Install Open3D Python package¶
Inside the activated virtualenv (shall be activated before cmake
),
run
# 1) Create Python package
# 2) Create pip wheel
# 3) Install Open3D pip wheel the current virtualenv
make install-pip-package
The above command is compatible with both pip and Conda virtualenvs. To uninstall, run
pip uninstall open3d
If more fine-grained controls, here is a list of all related build targets:
# Create Python package in build/lib/python_package
make python-package
# Create pip wheel in build/lib/python_package/pip_package
make pip-package
# Create conda package in build/lib/python_package/conda_package
make conda-package
# Install pip wheel
make install-pip-package
If the installation is successful, we shall now be able to import Open3D
python -c "import open3d"
5.2 Install Open3D as a C++ library¶
To Install/uninstall the Open3D as a C++ library (headers and binaries):
cd build
make install
...
make uninstall
Note that sudo
may be needed to install Open3D to a system location.
To link a C++ project against the Open3D C++ library, please refer to Create C++ project, starting from this example CMake file.
Tip
You may also check out utils/scripts
which contains scripts
to build, install and verify the code. These scripts may help in subsequent
builds when contributing to Open3D.
MacOS¶
The MacOS compilation steps are mostly identical with Ubuntu.
1. Install dependencies (optional)¶
Run util/scripts/install-deps-osx.sh
. We use homebrew
to manage dependencies. Follow the instructions from the script.
2. Setup Python binding environments¶
Same as the steps for Ubuntu: 2. Setup Python binding environments.
3. Config¶
Same as the steps for Ubuntu: 3. Config.
Alternatively, to use Xcode IDE, run:
mkdir build-xcode
cd build-xcode
cmake -G Xcode -DCMAKE_INSTALL_PREFIX=<open3d_install_directory> ..
open Open3D.xcodeproj/
5. Install¶
Same as the steps for Ubuntu: 5. Install.
Windows¶
1. Dependencies¶
For easy compilation, we have included source code of all dependent libraries
in the 3rdparty
folder. Therefore, we don’t need to install any dependencies.
2. Setup Python binding environments¶
Most steps are the steps for Ubuntu: 2. Setup Python binding environments.
Instead of which
, check the Python path with where python
, also pay
attention to the Found PythonInterp
message printed by CMake.
3. Config (generate Visual Studio solution)¶
The CMake GUI is as shown in the following figure. Specify the
directories, click Configure
and choose the correct Visual Studio
version (e.g., Visual Studio 16 2019 Win64
), then click Generate
.
This will create an Open3D.sln
file in the build directory.
Alternatively, this file can be generated by calling CMake from the console:
mkdir build
cd build
:: Run one of the following lines based on your Visual Studio version
cmake -G "Visual Studio 16 2019 Win64" ..
Error
If cmake fail to find PYTHON_EXECUTABLE
, follow the Ubuntu guide:
2. Setup Python binding environments to activate the Python virtualenv before running
cmake
or specify the Python path manually.
By default, CMake links with dynamic runtime (/MD
or /MDd
). To link with
static runtime (/MT
or /MTd
) set -DSTATIC_WINDOWS_RUNTIME=ON
.
4. Build¶
Open Open3D.sln
file with Visual Studio, change the build type to
Release
, then rebuild the ALL_BUILD
target.
Alternatively, we can also build directly from the CMD terminal. Run
cmake --build . --parallel %NUMBER_OF_PROCESSORS% --config Release --target ALL_BUILD
5. Install¶
Open3D can be installed as a C++ library or a Python package, by building the corresponding targets with Visual Studio or from the terminal. E.g.
cmake --build . --parallel %NUMBER_OF_PROCESSORS% --config Release --target the-target-name
Here’s a list of installation related targets. Please refer to 5. Install for more detailed documentation.
install
python-package
pip-package
install-pip-package
Sanity check¶
For a quick sanity check, try importing the library from the Python interactive shell:
python
>>> import open3d
Error
If there is an issue, check whether the Python version detected by
CMake (see Found PythonInterp
log from CMake, or check the value of the
PYTHON_EXECUTABLE
CMake variable) and the Python version for command
line environment (type python -V
). They should match. If it is not,
please follow 2. Setup Python binding environments in docs. In addition,
python binding issue
on Github repository has helpful notes from Open3D users.
Compilation Options¶
This page shows advanced options to customize the Open3D build. For quick start, see Compiling from source.
Dependencies¶
For each dependent library, there is a corresponding CMake build option
BUILD_<LIBRARY_NAME>
. If the option is ON
, the dependent library is
forced to be compiled from the source code included in 3rdparty
folder. If
it is OFF
, CMake will try to find system installed libraries and use it.
If CMake fails to find the dependent library, it falls back to compiling the
library from source code.
Tip
On Ubuntu and MacOS it is recommended to link Open3D to system installed
libraries. The dependencies can be installed via scripts
util/scripts/install-deps-ubuntu.sh
and
util/scripts/install-deps-osx.sh
. On Windows, it is recommended to
compile everything from source since Windows lacks a package management
software.
The following is an example of forcing building dependencies from source code:
cmake -DBUILD_EIGEN3=ON \
-DBUILD_FLANN=ON \
-DBUILD_GLEW=ON \
-DBUILD_GLFW=ON \
-DBUILD_PNG=ON \
..
Note
Enabling these build options may increase the compilation time.
OpenMP¶
We automatically detect if the C++ compiler supports OpenMP and compile Open3D
with it if the compilation option WITH_OPENMP
is ON
.
OpenMP can greatly accelerate computation on a multi-core CPU.
The default LLVM compiler on OS X does not support OpenMP.
A workaround is to install a C++ compiler with OpenMP support, such as gcc
,
then use it to compile Open3D. For example, starting from a clean build
directory, run
brew install gcc --without-multilib
cmake -DCMAKE_C_COMPILER=gcc-6 -DCMAKE_CXX_COMPILER=g++-6 ..
make -j
Note
This workaround has some compatibility issues with the source code of
GLFW included in 3rdparty
.
Make sure Open3D is linked against GLFW installed on the OS.
Unit test¶
To build unit tests, set BUILD_UNIT_TESTS=ON at CMake config stage. The unit test executable will be located at bin/unitTests in the build directory.
Please also refer to googletest for reference.
# In the build directory
cmake -DBUILD_UNIT_TESTS=ON ..
make -j
./bin/unitTests