Closed xiaokaixuan closed 1 year ago
以下为第二种方案
将以下文件解压后改名为缺失的lib
文件名legacy_stdio_definitions.lib
,放到其他已有的lib
文件同目录即可。
其他类似的代码未调用的缺失lib
文件,亦可依此方法处理。
以下压缩包中包含一个空的lib
文件:
fake_lib.zip
Win 7无法使用
JetBrains.Rider
缺少USERENV.DLL
的解决办法,使用代理rider64.exe
// rider64 project main.go
package main
import (
"log"
"os"
"os/exec"
"syscall"
)
// go build -ldflags -H=windowsgui
func main() {
cmd := exec.Command("rider.bat", os.Args[1:]...)
cmd.Stderr = os.Stderr
cmd.Stdout = os.Stdout
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
if err := cmd.Run(); err != nil {
if err1, ok := err.(*exec.ExitError); ok {
os.Exit(err1.ExitCode())
} else {
log.Fatalf("Command Error: %v\n", err)
}
}
}
link_wrapper.exe
,链接时忽略legacy_stdio_definitions.lib
。import ( "bytes" "fmt" "io/ioutil" "log" "os" "os/exec" "strings" "unicode/utf16" "unicode/utf8" )
const LINK_PATH = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\link.exe"
var IGNORE_LIBS = map[string]bool{ "legacy_stdio_definitions.lib": true, }
type ArgsParser struct { Args []string }
func (ap *ArgsParser) ProcessArg(str string) error { str = strings.Trim(str, "\"") if str == "" { return nil } else if str[0] == '@' { content, err := ap.ReadFileUtf16(str[1:]) if err != nil { return err } strs := strings.Split(content, "\n") for _, str1 := range strs { err := ap.ProcessArg(str1) if err != nil { return err } } } else if !IGNORE_LIBS[str] { ap.Args = append(ap.Args, str) } return nil }
func (*ArgsParser) ReadFileUtf16(filename string) (string, error) { b, err := ioutil.ReadFile(filename) if err != nil { return "", err } lb := len(b) if len(b)%2 != 0 { return "", fmt.Errorf("ReadFileUtf16 length mod 2 != 0") }
}
func main() { ap := ArgsParser{} for _, str := range os.Args[1:] { err := ap.ProcessArg(str) if err != nil { log.Fatalf("ProcessArg Error: %v\n", err) } } //ioutil.WriteFile("linkargs.log", []byte(strings.Join(ap.Args, "\n")), 0666) //stdout, := os.OpenFile("stdout.log", os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666) //defer stdout.Close()
}
link_wrapper.exe
,只需创建C:\User\XXX\.cargo\config.toml
,同时将link_wrapper.exe
放入.cargo
目录。内容如下:Demo
如下: hello_demo.zip