我想使用syso文件go build
为可执行文件设置图标。
一切在我的win10笔记本电脑上都可以正常运行,但是当我在ubuntu-latest或Windows-latest上使用相同的syso文件(通过git
lfs签入)时,我收到此消息:
C:\Users\VSSADM~1\AppData\Local\Temp\go-build430615882\b001\_pkg_.a(rsrc.syso): not an object file
##[error]The Go task failed with an error: Error: The process 'C:\hostedtoolcache\windows\go\1.14.2\x64\bin\go.exe' failed with exit code 2
当我尝试重新创建syso文件时,收到以下消息:在管道中bad magic number
调用可执行文件($env:GOPATH+"\bin\rsrc.exe")
时。
对于我的问题,如何在Azure DevOps上的Windows管道中为Go生成syso文件并将其用于go build
?
pool:
vmImage: 'windows-2019'
variables:
GOBIN: '$(GOPATH)/bin'
GOPATH: '$(system.DefaultWorkingDirectory)/gopath'
ExecutableName: tool
GoFilePath: '$(System.DefaultWorkingDirectory)/cmd/Tool/'
steps:
- task: GoTool@0
inputs:
version: '1.14.2'
- task: Go@0
inputs:
command: 'get'
arguments: '-d ./...'
workingDirectory: '$(System.DefaultWorkingDirectory)'
- task: PowerShell@2
displayName: Set last tag to variable
inputs:
targetType: 'inline'
script: |
$VERSION_TAG = git describe --tags (git rev-list --tags --max-count=1)
Write-Host("##vso[task.setvariable variable=VERSION_TAG]$VERSION_TAG")
Write-Host("##vso[build.addbuildtag]$VERSION_TAG")
Write-Host($VERSION_TAG)
- task: PowerShell@2
displayName: Set date to variable
inputs:
targetType: 'inline'
script: |
$DATE = Get-Date -Format "yyyy-MM-dd"
Write-Host("##vso[task.setvariable variable=DATE]$DATE")
- task: Go@0
displayName: 'Create release for windows x64'
enabled: true
env:
GOOS: windows
GOARCH: amd64
inputs:
command: 'build'
arguments: '-ldflags "-s -w -X main.Version=$(VERSION_TAG) -X main.BuildTime=$(DATE)" -trimpath -o release_build/$(ExecutableName).exe $(GoFilePath)'
workingDirectory: '$(System.DefaultWorkingDirectory)'
- task: Go@0
displayName: 'Create release for windows x86'
enabled: true
env:
GOOS: windows
GOARCH: 386
inputs:
command: 'build'
arguments: '-ldflags "-s -w -X main.Version=$(VERSION_TAG) -X main.BuildTime=$(DATE)" -trimpath -o release_build/$(ExecutableName)_x86.exe $(GoFilePath)'
workingDirectory: '$(System.DefaultWorkingDirectory)'
- task: Go@0
displayName: 'Create release for linux x64'
enabled: true
env:
GOOS: linux
GOARCH: amd64
inputs:
command: 'build'
arguments: '-ldflags "-s -w -X main.Version=$(VERSION_TAG) -X main.BuildTime=$(DATE)" -trimpath -o release_build/$(ExecutableName).bin $(GoFilePath)'
workingDirectory: '$(System.DefaultWorkingDirectory)'
- task: Go@0
displayName: 'Create release for linux x86'
enabled: true
env:
GOOS: linux
GOARCH: 386
inputs:
command: 'build'
arguments: '-ldflags "-s -w -X main.Version=$(VERSION_TAG) -X main.BuildTime=$(DATE)" -trimpath -o release_build/$(ExecutableName)_386.bin $(GoFilePath)'
workingDirectory: '$(System.DefaultWorkingDirectory)'
- task: Go@0
displayName: 'Create release for macOS x64'
enabled: true
env:
GOOS: darwin
GOARCH: amd64
inputs:
command: 'build'
arguments: '-ldflags "-s -w -X main.Version=$(VERSION_TAG) -X main.BuildTime=$(DATE)" -trimpath -o release_build/$(ExecutableName).app $(GoFilePath)'
workingDirectory: '$(System.DefaultWorkingDirectory)'
- task: CopyFiles@2
inputs:
SourceFolder: '$(System.DefaultWorkingDirectory)/release_build'
TargetFolder: '$(Build.ArtifactStagingDirectory)'
- task: CopyFiles@2
inputs:
SourceFolder: '$(System.DefaultWorkingDirectory)/docs'
TargetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'Tool Executables'
当我写出我想出的问题时,我将其git lfs
用于这些文件。添加此步骤后,我可以使用资源文件编译可执行文件。
steps:
- checkout: self
lfs: true
但是在以GOOS窗口为目标的构建之后,我必须删除这些文件,因为否则会出现错误:
/opt/hostedtoolcache/go/1.14.2/x64/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/usr/bin/ld: i386 architecture of input file `/tmp/go-link-782633042/000000.o' is incompatible with i386:x86-64 output
collect2: error: ld returned 1 exit status
删除这些文件的步骤:
- task: PowerShell@2
displayName: Remove syso files
inputs:
targetType: 'inline'
script: |
Remove-Item $(System.DefaultWorkingDirectory)/cmd/AnalyseTool/*.syso
这是v1文本指针的示例:
version https://git-lfs.github.com/spec/v1
oid sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393
size 12345
(ending \n)
来源:https :
//github.com/git-lfs/git-
lfs/blob/master/docs/spec.md
在 没有lfs支持的情况下 下载源代码时,将放置此文本文件,而不是 实际 文件。
因此很明显,该文件无法执行(错误的魔术数)或引用的bin文件格式错误(不是目标文件)。
问题内容: Go的库缺少生成64位数字的功能。大约四年来这是一个未解决的问题。同时,解决方法是什么样的? 问题答案: 最简单的方法是拨打两次: 另一个选择是调用(在Go 1.7中添加了 )以读取8个字节,然后使用该包从中获取值: 注意:作为状态文档,它始终读取与传递的切片长度相同的字节,并且始终返回错误,因此在这种情况下无需检查错误。 注意#2:您也可以使用代替,因为我们正在使用其所有字节生成一个
有一个目录 写入终端 我得到了错误 proc-gen-go:无效的Go导入路径"转发"为"proto/forward.proto" 导入路径必须至少包含一个正斜杠(“/”)字符。 看见https://developers.google.com/protocol-buffers/docs/reference/go-generated#package了解更多信息。 --go\u out:protoc
问题内容: 例如: 有任何内置功能可以做到这一点吗? 谢谢。 问题答案: 该散包是这很有帮助。请注意,这是对特定哈希实现的抽象。在软件包子目录中可以找到一些现成的。 例: (也在这里) 输出:
问题内容: 我的软件包中有一个生成的文件,该文件位于顶部。我正在使用进行包裹测试。这将创建覆盖率配置文件并显示总覆盖率百分比。但是在计算覆盖率时,它还包括生成的文件。有没有一种方法可以在覆盖率计算中忽略生成的文件? 问题答案: 大多数Go工具都在软件包上运行,因为软件包本身形成了一个整体上可能有用的 单元 。从软件包中排除文件很容易“破坏”软件包:被排除的文件可能包含(关键的)软件包初始化代码,甚
问题内容: 在python中,您可以按以下顺序生成带有键的JSON: 我在Go中找不到类似的选项。有什么想法可以在旅途中实现类似的行为吗? 问题答案: json包在编组时总是对密钥进行排序。特别: 地图按字典顺序对键进行排序 结构键按照结构中定义的顺序编组 该实现位于此处的ATM中: http://golang.org/src/pkg/encoding/json/encode.go?#L359
问题内容: 我曾经生成文件。但是我只能生成,这意味着什么都不生成就可以工作? 我如何产生? 问题答案: 来自: