我正在尝试在树莓派中编译go项目。
该项目有5个文件,两个小.c
文件和与之对应的文件.h
(其中一个是我的代码-它调用另一个文件,这是一个base64库)和一个使用.go
调用我的.c
代码的文件cgo
。
当我gcc
仅在树莓派上编译我的C代码(包括其调用和所有内容)时,它无需任何配置即可很好地工作。
当我使用编译x86
Linux Ubuntu机器上的整个go项目时go build
,它也做得很好。
但是,当我尝试go build
在树莓派pi中编译go项目时,并没有得到我的C库:
fiatjaf@raspberrypi ~/g/s/b/f/project> go build -x
WORK=/tmp/go-build702187084
mkdir -p $WORK/bitbucket.org/fiatjaf/project/_obj/
cd /home/fiatjaf/go/src/bitbucket.org/fiatjaf/project
/usr/lib/go/pkg/tool/linux_arm/5c -FVw -I $WORK/bitbucket.org/fiatjaf/project/_obj/ -I /usr/lib/go/pkg/linux_arm -o $WORK/bitbucket.org/fiatjaf/project/_obj/base64.5 -DGOOS_linux -DGOARCH_arm ./base64.c
# bitbucket.org/fiatjaf/project
./base64.c:2 5c: No such file or directory: math.h
(如果我也把问题放在<stdlib.h>
前面<math.h>
,那么问题也不是因为缺少math.h),我试图:
// #cgo CFLAGS: -I/usr/include
到.go
文件// #cgo LDFLAGS: -I/usr/include
(我无法发现这些标志的正确用法是什么)go build -ldflags '-I/usr/include'
我不明白为什么go会尝试使用编译base64.c -I /usr/lib/go/pkg/linux_arm
。真的不行 有人帮忙。
它有5个文件,即2 C(及其对应的H):
base64.c
#include <math.h>
#include <stdint.h>
#include <stdlib.h>
... // definitions of functions used at project.c
工程
#include <stdlib.h>
#include <string.h>
#include "base64.h"
... // functions used at project.go
和1 Go:
...
// #include <stdlib.h>
// #include <string.h>
// #include "project.h"
// #cgo CFLAGS: -I/usr/include
// #cgo LDFLAGS: -lm
import "C"
...
为了使此功能生效,我应该在哪里,什么位置以及如何更改此声明?为何它在我的x86 linux上有效?
看来我的问题与未设置CGO_ENABLED
标志有关。
我不确定,但是似乎是这样,因为我从Raspbian存储库中卸载了Go(默认情况下似乎禁用了CGO)并从源代码安装了Go(就像我在x86 Linux中所做的那样),开始工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句