- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个这样的围棋程序:
package main
import "fmt"
var version string
func main() {
fmt.Printf("Version %s\n", version)
}
我想在编译时更改version 的值,如here 所示,所以我正在以这种方式构建它(wtf.go 在 src/wtf 中):
go build -ldflags "-X wtf/main.version=1.0.0.1234" wtf
go install wtf
但是当我运行时,version 是一个空字符串。
我已经尝试了各种版本的外壳,包名称和路径的不同变体。似乎 go build 并没有过多地验证包/变量名称,因为显然伪造的名称不会产生错误。
有什么方法可以找出 go 试图修改的变量,以便解决这个问题?
我正在为 Windows/amd64 使用 Go v 1.10.3。
最佳答案
错误是您必须通过导入路径指定包,而不是 src
文件夹的相对文件夹。因此,只需引用您的 version
变量,例如 main.version
。有关详细信息,请参阅 How to set package variable using -ldflags -X in Golang build .
因此导航到 %GOPATH%/src/wtf
,并使用以下命令构建它:
go build -ldflags "-X main.version=1.0.0.1234" wtf.go
(或者如果您在src/wtf
文件夹中没有其他包的源文件,您可以省略源文件名。)
这会将 wtf.exe
放在当前文件夹中。运行它会打印:
Version 1.0.0.1234
请注意,不需要 go install
。这将构建您的应用程序并将可执行二进制文件放置在 %GOPATH%/bin
中,但不会设置 version
!
如果您想使用go install
,您必须再次提供标志。在 %GOPATH%/src/wtf
文件夹中运行以下命令:
go install -ldflags "-X main.version=1.0.0.1234"
另请注意,go install
不需要您先运行 go build
,您也不需要在 go install
之后运行 开始构建
。有关详细信息,请参阅 What does go build build?
关于go - 使用 -X ldflag 调试问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53193020/
我创建了一个食谱,总结如下: do_install() { install -d ${D}/GreenTea cp ${S}/foo.sh ${D}/GreenTea cp ${S}/fo
我有一个项目的下一个结构: cruceGame/ src/ libCruceGame/... cruceGameCurses/... multi
我正在尝试使用 go build 来更新我项目中的一个变量: 完整项目路径: c:\goprojects\src\deployment\cl\apps\appName 从 c:\goprojects\
我有一个无法正确链接的 C 项目,我怀疑这是因为 gcc 传递给 ld 程序的 --as-needed 标志。由于该标志,gcc 将在 *.c 文件之前列为选项的任何链接库视为不必要的,并且不会链接它
我正在尝试建立一个名为 PBC 的库(基于配对的密码学)。而这个库需要另一个名为 GMP 的库。 -(GNU 多精度库)。 我的问题是正确安装GMP后,PBC给出了一个错误: gmp library
我正在使用以下标志编译程序并出现错误(运行 64 位操作系统): g++ -lm -lml -lcvaux -lhighgui -lcv -lcxcore main.o BRIEF.o -o BRIE
我在 OS X 10.6.2 上遇到 python-config --ldflags 问题。 使用我的非系统 python.org python 安装: robin-mbp:~ robince$ wh
我想在程序启动时打印构建时间,例如: package main import "fmt" var BuildTime string func main() { fmt.Println(Buil
一个快速的问题。我在示例 Makefile 中找到了“DLDFLAGS”和“LDFLAGS”。使用的编译器是gcc。看起来它们都用于链接器。我想知道它们之间有什么区别。 最佳答案 LDFLAGS通常设
我想在一个存储库中有多个二进制文件,但也想通过 ldflags 设置版本选项。 在存储库中只有一个二进制文件我没有问题,它可以工作,但是对于多个二进制文件的新结构似乎不起作用。 我在 github 上
根据操作系统的不同,我在configure.ac中定义了一个特殊的LDFLAGS: AC_CANONICAL_HOST if test "$host_os" = cygwin then LDF
我是 Linux 操作系统新手。我正在尝试使用 makefile 编译 .c 文件。必须链接数学库。我的 makefile 如下所示: CC=gcc CFLAGS=-Wall -lm all:clie
在 Makefile 中将库与 LDFLAGS 链接时,如何知道库的名称? 例如: libxml2.dylib 与 -lxml2 链接 libz.dylib 实际上命名为 zlib 与 -lz 链接
我有一个使用 GCC 和 MinGW 为 Ubuntu 和 Windows 编译的 Qt 项目。 I got a requirement to harden it by adding the foll
我已经阅读了一些安装,我需要正确设置环境变量LDFLAGS、LD_LIBRARY_PATHS和CXXFLAGS才能运行./compile.sh。但是,我不确定在那里提供什么路径。有人可以解释一下这些标
我想知道 AM_LDFLAGS 和 LDFLAGS 之间的区别,因为我遇到了错误 error: AM_LDFLAGS must be set with '=' before using '+=' 当我
如果我有两个具有相同库名称但存储在不同目录中的库(并且它们可能包含不同的代码)并且我在 makefile 的 LDFLAGS 变量中列出了这两个目录,链接器如何知道先看哪里以及先看哪个要使用的库?
我有一个这样的围棋程序: package main import "fmt" var version string func main() { fmt.Printf("Version %s\n
我正在 Windows 上使用 MSys 和 Mingw 构建一个 dll。项目的源码只提供了autogen.sh、configure.ac和makefile.am。要生成 makefile,运行 a
如何在 qt .pro 字段中添加 LDFLAGS? 考虑库文件夹和共享库(.so)位于 dir_path 文件夹中。 例如,添加这一行并不能解决问题 LIBS+= -Ldir_path -llibr
我是一名优秀的程序员,十分优秀!