Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

linux amd64系统使用--static参数编译时,无法通过编译 #608

Open
cntpro opened this issue May 18, 2024 · 4 comments
Open

linux amd64系统使用--static参数编译时,无法通过编译 #608

cntpro opened this issue May 18, 2024 · 4 comments
Labels
bug Something isn't working

Comments

@cntpro
Copy link

cntpro commented May 18, 2024

Describe the bug(Bug 描述)

在x64 linux系统中使用参数--static 编译时,无法正常编译,提示
[INFO] build: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -mod=mod -o /root/gemix/openGemini/build/ts-cli -a -installsuffix cgo -ldflags="-s -X github.com/openGemini/openGemini/app.Version=1.2.0 -X github.com/openGemini/openGemini/app.GitBranch=main -X github.com/openGemini/openGemini/app.GitCommit=ac2995079ff4ec00369f462623114b1c505e03e3" ./app/ts-cli
[ERROR] run: Command 'CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -mod=mod -o /root/gemix/openGemini/build/ts-cli -a -installsuffix cgo -ldflags="-s -X github.com/openGemini/openGemini/app.Version=1.2.0 -X github.com/openGemini/openGemini/app.GitBranch=main -X github.com/openGemini/openGemini/app.GitCommit=ac2995079ff4ec00369f462623114b1c505e03e3" ./app/ts-cli' failed with error: b'github.com/openGemini/openGemini/lib/util/lifted/encoding/lz4: build constraints exclude all Go files in /root/gemix/openGemini/lib/util/lifted/encoding/lz4\n'
python3 build.py --clean --release --static

To Reproduce(Bug 复现步骤)

  1. 编译时带有参数 --static
    如python3 build.py --clean --release --static

Expected behavior(期望结果)

正常编译

Screenshots(屏幕截图)

No response

Logs(完整的错误日志)

[root@dev openGemini]# python3 build.py --clean --release --static
[INFO] print_banner:
______ _ _
.' ___ | () ()
.--. _ .--. .---. _ .--. / .' _| .---. _ .--..--. __ _ .--. __
/ .'\ \[ '/'\ / /[ .-. || | ____ / /__\[ .-. .-. | [ | [ .-. | [ | | \__. | | \__/ || \__., | | | |\ .] || _., | | | | | | | | | | | | | |
'..' | ;./ '..'[||]`..' '..'[||||][][||][]
[
|

Build Script

[INFO] check_environ: Checking environment...
[INFO] check_prereqs: Checking for dependencies...
[INFO] build: Starting build for linux/amd64...
[INFO] build: Using Go version: 1.20.12
[INFO] build: Using git branch: main
[INFO] build: Using git commit: ac29950
[INFO] build: Using statically-compiled output.
[INFO] build: Sending build output to: /root/gemix/openGemini/build
[INFO] build: Cleaning build directory '/root/gemix/openGemini/build' before building.
[INFO] build: Using version '1.2.0' for build.
[INFO] build: Building target: ts-cli
[INFO] build: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -mod=mod -o /root/gemix/openGemini/build/ts-cli -a -installsuffix cgo -ldflags="-s -X github.com/openGemini/openGemini/app.Version=1.2.0 -X github.com/openGemini/openGemini/app.GitBranch=main -X github.com/openGemini/openGemini/app.GitCommit=ac2995079ff4ec00369f462623114b1c505e03e3" ./app/ts-cli
[ERROR] run: Command 'CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -mod=mod -o /root/gemix/openGemini/build/ts-cli -a -installsuffix cgo -ldflags="-s -X github.com/openGemini/openGemini/app.Version=1.2.0 -X github.com/openGemini/openGemini/app.GitBranch=main -X github.com/openGemini/openGemini/app.GitCommit=ac2995079ff4ec00369f462623114b1c505e03e3" ./app/ts-cli' failed with error: b'github.com/openGemini/openGemini/lib/util/lifted/encoding/lz4: build constraints exclude all Go files in /root/gemix/openGemini/lib/util/lifted/encoding/lz4\n'
[INFO] write_to_gobuild: write to file
Traceback (most recent call last):
File "build.py", line 150, in run
out = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=shell)
File "/usr/lib64/python3.6/subprocess.py", line 356, in check_output
**kwargs).stdout
File "/usr/lib64/python3.6/subprocess.py", line 438, in run
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command 'CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -mod=mod -o /root/gemix/openGemini/build/ts-cli -a -installsuffix cgo -ldflags="-s -X github.com/openGemini/openGemini/app.Version=1.2.0 -X github.com/openGemini/openGemini/app.GitBranch=main -X github.com/openGemini/openGemini/app.GitCommit=ac2995079ff4ec00369f462623114b1c505e03e3" ./app/ts-cli' returned non-zero exit status 1.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "build.py", line 605, in
sys.exit(main(main_args))
File "build.py", line 496, in main
static=args.static):
File "build.py", line 398, in build
run(build_command, shell=True)
File "build.py", line 166, in run
write_to_gobuild(e.output)
File "build.py", line 410, in write_to_gobuild
f.write(content)
TypeError: write() argument must be str, not bytes

No response

Additional context(其他的一些补充内容)

无 --static 参数,可以编译成功
python3 build.py --clean --release
No response

@cntpro cntpro added the bug Something isn't working label May 18, 2024
@xiangyu5632
Copy link
Member

Please set CGO_ENABLED=1 in build.py and have a try

# Handle static binary output
if static is True or "static_" in arch:
      if "static_" in arch:
             static = True
             arch = arch.replace("static_", "")
      build_command += "CGO_ENABLED=0 "

@cntpro
Copy link
Author

cntpro commented May 23, 2024

将CGO_ENABLED=1,可以编译成功,但与期望结果不一致,带有参数 --static希望获得的是静态链接,当把CGO_ENABLED=1打开后,得到的是动态链接文件,如图
build py

ldd

@cntpro
Copy link
Author

cntpro commented May 25, 2024

修改build.py文件,可以编译出静态文件
1、注释掉355行 #build_command += "CGO_ENABLED=0 "

350 # Handle static binary output 351 if static is True or "static_" in arch: 352 if "static_" in arch: 355 #build_command += "CGO_ENABLED=0 "
2、在385行增加-extldflags '-static'

383 if static: 384 build_command += "-a -installsuffix cgo " 385 ldflags = "-ldflags=\"-s -extldflags '-static' -X {package}.Version={version} -X {package}.GitBranch={branch} -X {package} .GitCommit={commit}\" " 386 else: 387 ldflags = "-ldflags=\"-X {package}.Version={version} -X {package}.GitBranch={branch} -X {package}.GitCommit={commit}\" "
3、编译
python3 build.py --clean --static
4、查看结果
[root@dev build]# file ts-server ts-server: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=4c19a0ca0205ca9ae3c83f2eb9a9347272f553fa, stripped, too many notes (256)

@cntpro
Copy link
Author

cntpro commented May 27, 2024

另外修改环境变量go 的环境变量CGO_LDFLAGS,增加静态链接标志-static也可以编译出静态文件

go env -w CGO_LDFLAGS="-O2 -g -static"
python3 build.py

这种方式编译静态文件有更快的编译速度

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants