You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.3 KiB

Compile the document

Preparatory Work

Xray uses Golang as its programming language, so you need to install the latest version of Golang first in order to compile.

::: tip TIP Install Golang: golang.org/doc/install :::

If you happen to use Windows, please make sure to use Powershell.

Pull Xray source code

git clone https://github.com/XTLS/Xray-core.git
cd Xray-core && go mod download

If you have free time, you can try GitHub's official tool: gh repo clone XTLS/Xray-core

Note: In a network environment where Google cannot be accessed normally, dependencies cannot be pulled normally, and GOPROXY needs to be set first:

go env -w GOPROXY=https://goproxy.io,direct

Build Binary

:::warning This command needs to be executed within Xray root directory. :::

Windows(Powershell):

$env:CGO_ENABLED=0
go build -o xray.exe -trimpath -ldflags "-s -w -buildid=" ./main

macOS, Linux:

CGO_ENABLED=0 go build -o xray -trimpath -ldflags "-s -w -buildid=" ./main

Running the above command will generate an xray executable file in the directory.

::: tip If you need to compile a program that can be debugged, i.e., you can use dlv to attach to the running program for debugging, please remove the '-w -s' options from the ldflags.

  • w option disables the generation of debug information. After using this option, gdb cannot be used for debugging.
  • s option disables the symbol table. PS: Actually, debugging with vscode or other IDEs seems to be more convenient.

Cross compilation:

Here, we take the example of compiling to a Linux server in a Windows (Powershell) environment:

$env:CGO_ENABLED=0
$env:GOOS="linux"
$env:GOARCH="amd64"

go build -o xray -trimpath -ldflags "-s -w -buildid=" ./main```

After uploading to the server, remember to execute chmod +x xray in the server terminal.

::: tip Execute go tool dist list to view all supported systems and architectures. :::

Reproducible Build:

Following the above steps, it is possible to compile and release an identical binary file as the one in Release.

::: warning Please confirm that you are using the same Golang version as the one used to compile the release. :::