我是在window上面,使用mingw环境,用源码带的make.bat从源码构建了一套go编译器:
GOOS=windows GOARCH=amd64 ./make.bat
当编译本地程序的时候,使用
./go build -buildmode=c-archive -o hello.a main.go
可以生成windows本地的.a库文件。
但是如果使用以下命令进行交叉编译(预期生成Linux+arm的.a):
GOSO=linux GOARCH=arm CGO_ENABLED=1 ./go build -buildmode=c-archive -o hello.a main.go
则会报错:
gcc.exe: error: unrecognized command line option '-pthread'
我有三个问题:
1)'-pthread'这个参数是谁用的,是在哪设置的、能否修改?
2)我在windows上面,用上述命令交叉编译linux+arm上的库文件,这种用法有没有问题?
3)如果上述命令有问题,能否给个在windows+amd64上使用go编译器,生成linux+arm的静态库.a的详细步骤?
感谢!
我也遇到了这个问题 要在哪里添加 链接库
交叉编译的话,最好在虚拟机的linux系统上搞吧。在windows上失败,有可能的。
最好不要在windows上面交叉编译linux+arm上的库文件
在虚拟机的linux下试试行不行?
有没有大神给指点迷津?
golang在windows上的交叉编译到底怎么处理?
是golang支持问题还是用法有问题?
"-pthread"参数是GCC编译器的一个选项,用于添加对多线程程序的支持。在编译时,它会链接相应的线程库以实现多线程功能。
在Windows系统上,通常会使用MinGW或者MinGW-W64来编译和链接程序。这些工具链默认使用"-pthread"参数,以确保在Windows上正确地链接POSIX线程库。
如果你不想使用"-pthread"参数,可以通过修改编译命令来去除它。在后面的解答中,将介绍如何通过修改编译命令来交叉编译生成Linux+arm目标码,并可以选择不使用"-pthread"参数。
对于使用Go语言的交叉编译,通常我们会使用GOOS
和GOARCH
环境变量,分别用于指定目标操作系统和目标架构。
但是,GO语言工具链自身并不支持直接交叉编译生成Linux+arm目标码。为了实现该功能,我们需要使用一些附加工具来辅助完成。下面将给出具体步骤进行解答。
为了在Windows系统上使用GO编译器生成Linux+arm的静态库,我们需要借助以下工具和步骤:
安装MinGW或MinGW-W64工具链: 首先,确保已经安装了MinGW或MinGW-W64工具链。你可以从官方网站下载安装包进行安装。安装的过程中,请选择安装mingw32-gcc和mingw-w64-x86_64-gcc这两个软件包,以便使用GCC编译器进行交叉编译。
设置环境变量: 在使用交叉编译之前,需要设置相关的环境变量。打开命令行终端,并执行以下命令来设置环境变量:
sh set GOOS=linux set GOARCH=arm set CC=mingw32-gcc
这里,GOOS
环境变量设置为"linux",GOARCH
环境变量设置为"arm",CC
环境变量设置为"mingw32-gcc"。这些设置将告诉Go编译器在交叉编译时使用指定的目标系统和编译器。
sh go build -buildmode=c-archive -o yourlib.a yoursource.go
这里,-buildmode=c-archive
选项指定了编译模式,将生成C语言可用的静态库。yourlib.a
是生成的静态库文件名,yoursource.go
是你的Go源文件名。
经过上述步骤,Go编译器将会交叉编译生成Linux+arm的静态库文件。你可以将该库文件移动到你希望的目录下,并在Linux系统中使用。
希望上述步骤能够解决你的问题。如果你还有其他问题或需要进一步帮助,请随时提问。