英文:
Cross-compiling for linux arm/7: clang error: argument unused during compilation '-marm'
问题
原因是在使用CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 go build
命令时,出现了编译错误。错误信息显示clang: error: argument unused during compilation: '-marm' [-Werror,-Wunused-command-line-argument]
。
这个错误是由于在编译过程中使用了-marm
参数,但它在当前的编译环境中是无效的。-marm
参数用于指定生成ARM代码,但在你的macOS Big Sur操作系统上,这个参数是不需要的。
要解决这个问题,你可以尝试去掉-marm
参数,然后重新运行编译命令。修改后的命令如下:
CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 go build
这样应该可以解决编译错误。另外,确保你的Golang版本是go1.17 darwin/amd64。
英文:
What is the reason and how to solve it? Please..
cmd : CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 go build
output:
# runtime/cgo
clang: error: argument unused during compilation: '-marm' [-Werror,-Wunused-command-line-argument]
- OS: macOS Big Sur
- Golang verson: go1.17 darwin/amd64
答案1
得分: 0
阅读精细手册:
> 在交叉编译时,您必须为cgo指定一个C交叉编译器。您可以通过在使用make.bash构建工具链时设置通用的CC_FOR_TARGET环境变量或更具体的CC_FOR_${GOOS}_${GOARCH}(例如,CC_FOR_linux_arm)环境变量,或者您可以在运行go工具时任何时候设置CC
环境变量来实现这一点。
因此,您需要为CGo指定交叉编译器,例如:
 CC=arm-linux-gnueabihf-gcc CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 go build
对于C++代码,还需要添加CXX=arm-linux-gnueabihf-g++
。
您需要安装gcc-arm-linux-gnueabihf
和libc6-dev-armhf-cross
软件包才能使上述方法工作(在Linux上,不清楚Mac上的情况)。
英文:
Read the fine manual:
> When cross-compiling, you must specify a C cross-compiler for cgo to use. You can do this by setting the generic CC_FOR_TARGET or the more specific CC_FOR_${GOOS}_${GOARCH} (for example, CC_FOR_linux_arm) environment variable when building the toolchain using make.bash, or you can set the CC
environment variable any time you run the go
tool.
So you need to specify the cross-compiler for CGo, e.g. like so:
 CC=arm-linux-gnueabihf-gcc CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 go build
For C++ code also add CXX=arm-linux-gnueabihf-g++
.
You'll need to have gcc-arm-linux-gnueabihf
and libc6-dev-armhf-cross
packages installed for the above to work (on Linux, don't know about Mac).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论