2015-08-31 05:30:12 +00:00
# Build Instructions (Linux)
2021-04-19 15:50:00 +00:00
Follow the guidelines below for building **Electron itself** on Linux, for the purposes of creating custom Electron binaries. For bundling and distributing your app code with the prebuilt Electron binaries, see the [application distribution][application-distribution] guide.
[application-distribution]: ../tutorial/application-distribution.md
2014-02-20 10:39:24 +00:00
## Prerequisites
2016-05-02 07:26:18 +00:00
* At least 25GB disk space and 8GB RAM.
2022-04-11 23:05:21 +00:00
* Python >= 3.7.
2016-09-14 02:41:53 +00:00
* Node.js. There are various ways to install Node. You can download
2018-01-12 15:24:48 +00:00
source code from [nodejs.org ](https://nodejs.org ) and compile it.
2015-08-31 05:30:12 +00:00
Doing so permits installing Node on your own home directory as a standard user.
Or try repositories such as [NodeSource ](https://nodesource.com/blog/nodejs-v012-iojs-and-the-nodesource-linux-repositories ).
2017-07-27 17:29:41 +00:00
* [clang ](https://clang.llvm.org/get_started.html ) 3.4 or later.
2020-03-31 04:06:25 +00:00
* Development headers of GTK 3 and libnotify.
2014-02-20 10:56:59 +00:00
2022-01-26 15:29:16 +00:00
On Ubuntu >= 20.04, install the following libraries:
```sh
$ sudo apt-get install build-essential clang libdbus-1-dev libgtk-3-dev \
libnotify-dev libasound2-dev libcap-dev \
libcups2-dev libxtst-dev \
libxss1 libnss3-dev gcc-multilib g++-multilib curl \
gperf bison python3-dbusmock openjdk-8-jre
```
On Ubuntu < 20.04 , install the following libraries:
2014-02-20 10:56:59 +00:00
2017-11-24 10:13:57 +00:00
```sh
2018-02-15 21:08:55 +00:00
$ sudo apt-get install build-essential clang libdbus-1-dev libgtk-3-dev \
2019-07-29 12:33:47 +00:00
libnotify-dev libgnome-keyring-dev \
2015-04-08 11:46:37 +00:00
libasound2-dev libcap-dev libcups2-dev libxtst-dev \
2016-08-10 18:08:14 +00:00
libxss1 libnss3-dev gcc-multilib g++-multilib curl \
2019-05-08 22:28:55 +00:00
gperf bison python-dbusmock openjdk-8-jre
2014-05-15 06:12:40 +00:00
```
2016-12-15 03:05:24 +00:00
On RHEL / CentOS, install the following libraries:
2017-11-24 10:13:57 +00:00
```sh
2018-02-15 21:08:55 +00:00
$ sudo yum install clang dbus-devel gtk3-devel libnotify-devel \
2016-12-15 03:05:24 +00:00
libgnome-keyring-devel xorg-x11-server-utils libcap-devel \
cups-devel libXtst-devel alsa-lib-devel libXrandr-devel \
2019-07-29 12:33:47 +00:00
nss-devel python-dbusmock openjdk-8-jre
2016-12-15 03:05:24 +00:00
```
2015-09-01 14:01:44 +00:00
On Fedora, install the following libraries:
2017-11-24 10:13:57 +00:00
```sh
2018-02-15 21:08:55 +00:00
$ sudo dnf install clang dbus-devel gtk3-devel libnotify-devel \
2016-12-15 03:05:24 +00:00
libgnome-keyring-devel xorg-x11-server-utils libcap-devel \
cups-devel libXtst-devel alsa-lib-devel libXrandr-devel \
2019-07-29 12:33:47 +00:00
nss-devel python-dbusmock openjdk-8-jre
2015-09-01 14:01:44 +00:00
```
2021-01-07 06:41:08 +00:00
On Arch Linux / Manjaro, install the following libraries:
```sh
$ sudo pacman -Syu base-devel clang libdbus gtk2 libnotify \
libgnome-keyring alsa-lib libcap libcups libxtst \
libxss nss gcc-multilib curl gperf bison \
python2 python-dbusmock jdk8-openjdk
```
2015-07-02 07:54:14 +00:00
Other distributions may offer similar packages for installation via package
2015-09-01 14:01:44 +00:00
managers such as pacman. Or one can compile from source code.
2015-06-05 23:38:30 +00:00
2015-07-02 07:54:14 +00:00
### Cross compilation
2015-08-31 05:30:12 +00:00
If you want to build for an `arm` target you should also install the following
2015-07-13 22:26:35 +00:00
dependencies:
2017-11-24 10:13:57 +00:00
```sh
2015-07-13 22:26:35 +00:00
$ sudo apt-get install libc6-dev-armhf-cross linux-libc-dev-armhf-cross \
g++-arm-linux-gnueabihf
```
2017-10-31 14:09:12 +00:00
Similarly for `arm64` , install the following:
2017-11-24 10:13:57 +00:00
```sh
2017-10-31 14:09:12 +00:00
$ sudo apt-get install libc6-dev-arm64-cross linux-libc-dev-arm64-cross \
g++-aarch64-linux-gnu
```
2017-07-27 17:29:41 +00:00
And to cross-compile for `arm` or `ia32` targets, you should pass the
2018-09-09 01:15:32 +00:00
`target_cpu` parameter to `gn gen` :
2015-07-02 07:54:14 +00:00
2017-11-24 10:13:57 +00:00
```sh
2019-11-07 19:51:44 +00:00
$ gn gen out/Testing --args='import(...) target_cpu="arm"'
2015-07-02 07:54:14 +00:00
```
2014-02-20 10:39:24 +00:00
## Building
2018-09-09 01:15:32 +00:00
See [Build Instructions: GN ](build-instructions-gn.md )
2017-03-17 18:44:18 +00:00
2014-02-20 10:39:24 +00:00
## Troubleshooting
2015-08-31 05:30:12 +00:00
### Error While Loading Shared Libraries: libtinfo.so.5
2015-07-04 04:57:29 +00:00
2017-06-19 15:45:06 +00:00
Prebuilt `clang` will try to link to `libtinfo.so.5` . Depending on the host
2015-08-31 05:30:12 +00:00
architecture, symlink to appropriate `libncurses` :
2015-07-04 04:57:29 +00:00
2017-11-24 10:13:57 +00:00
```sh
2015-07-04 04:57:29 +00:00
$ sudo ln -s /usr/lib/libncurses.so.5 /usr/lib/libtinfo.so.5
```
2016-05-02 07:35:33 +00:00
## Advanced topics
The default building configuration is targeted for major desktop Linux
2017-07-27 17:29:41 +00:00
distributions. To build for a specific distribution or device, the following
2016-05-02 07:35:33 +00:00
information may help you.
2016-05-02 13:32:43 +00:00
### Using system `clang` instead of downloaded `clang` binaries
2018-01-12 15:24:48 +00:00
By default Electron is built with prebuilt
2017-07-27 17:29:41 +00:00
[`clang` ](https://clang.llvm.org/get_started.html ) binaries provided by the
2018-01-12 15:24:48 +00:00
Chromium project. If for some reason you want to build with the `clang`
2018-09-09 01:15:32 +00:00
installed in your system, you can specify the `clang_base_path` argument in the
GN args.
2016-05-02 13:32:43 +00:00
2018-09-09 01:15:32 +00:00
For example if you installed `clang` under `/usr/local/bin/clang` :
2016-05-02 13:32:43 +00:00
2017-11-24 10:13:57 +00:00
```sh
2019-11-07 19:51:44 +00:00
$ gn gen out/Testing --args='import("//electron/build/args/testing.gn") clang_base_path = "/usr/local/bin"'
2016-05-02 13:32:43 +00:00
```
2017-07-27 17:29:41 +00:00
### Using compilers other than `clang`
2016-05-02 13:32:43 +00:00
2018-09-09 01:15:32 +00:00
Building Electron with compilers other than `clang` is not supported.