我目前正在测试Go-SDL2 lib,只是为了好玩。我把二进制文件给了我的一个朋友,但是他的机器上没有安装SDL。所以我想要做的就是跳舞(是舞蹈)是用二进制文件分发4个.so库,以便在其他Linux机器上运行良好。实际上很简单,我只需要将LD_LIBRARY_PATH设置为指向当前文件夹即可。这是为了测试目的。
问题是,我必须先设置此环境变量 我可以导入go-sdl2 lib。现在我有一个单一的源文件(很明显是main.go)。
我怎样才能做到这一点? (它甚至可能吗?)
答案 0 :(得分:1)
一个选项是在调用LD_LIBRARY_PATH
之前设置一个设置go-sdl2
环境变量的脚本(在同一个脚本中)。
另一个更有趣的选择是使用Docker image,根据该图像制作Dockerfile,然后安装SDL并进入其中(如didstopia/sdl2
ad its Dockerfile,结合一个Golang Dockerfile)。
然后您拥有可重现的标准环境,您无需更改LD_LIBRARY_PATH
。并且您可以导出该图像,以便您的朋友进行实验。
答案 1 :(得分:0)
你可以,在main中,检查是否设置了LD_LIBRARY_PATH,如果没有,重新启动(使用:os.exec)你自己添加环境变量。
你基本上想用os.Args作为exec的参数,还要把你的环境加到LD_LIBRARY_PATH中
Bash脚本绝对是一种不那么时髦的方式。但如果你真的想让go app做到这一点,你可以。
您需要以下内容:(未经测试)
cmd := os.Command(os.Args[0],os.Args[1:]...)
cmd.Env = append(os.Environ, "LD_LIBRARY_PATH=./wherever")
cmd.StdErr = os.StdErr // repeat for StdIn/StdOut
err := cmd.Run() //blocks until sub process is complete
if err != nil {
os.Exit(1)
}
像这样的东西