编译cgo包时,go build没有找到我的C标准库

fia*_*jaf 7 arm go raspberry-pi cgo

我正在尝试在树莓派中编译一个go项目.

该项目有5个文件,两个小.c文件及其对应物.h(其中一个文件是我的代码 - 它调用另一个,这是一个base64库)和一个.go调用我的.c代码的文件cgo.

当我gcc在树莓派上单独编译我的C代码(带有它的调用和所有内容)时它没有任何配置.

当我在我的x86Linux Ubuntu机器上编译整个go项目时go build,它也做得很好.

但是当我尝试使用go buildraspberry 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
Run Code Online (Sandbox Code Playgroud)

(如果我把问题发生在它<stdlib.h>之前<math.h>,那么问题不是没有math.h,我想)我试着:

  • 添加// #cgo CFLAGS: -I/usr/include.go文件中
  • 添加// #cgo LDFLAGS: -I/usr/include(我无法发现这些标志的正确用法)
  • 使用 go build -ldflags '-I/usr/include'

我不明白为什么要尝试编译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
Run Code Online (Sandbox Code Playgroud)

project.c

#include <stdlib.h>
#include <string.h>
#include "base64.h"
... // functions used at project.go
Run Code Online (Sandbox Code Playgroud)

和1去:

...

// #include <stdlib.h>
// #include <string.h>
// #include "project.h"
// #cgo CFLAGS: -I/usr/include
// #cgo LDFLAGS: -lm
import "C"
...
Run Code Online (Sandbox Code Playgroud)

在这个声明中我应该在哪里,什么以及如何改变这个东西?为什么它在我的x86 linux上运行?

fia*_*jaf 1

看来我的问题与没有设置CGO_ENABLED标志有关。

我不确定,但似乎是因为我从 Raspbian 存储库卸载了我的 Go(默认情况下似乎禁用了 CGO)并从源代码安装了 Go(就像我在 x86 Linux 中所做的那样)然后它开始工作了。