ラズベリーパイでgoプロジェクトをコンパイルしようとしています。
プロジェクトには 5 つのファイル、2 つの小さな.c
ファイルとそれに対応するファイル (これらのファイルの 1 つは私のコード.h
です。もう 1 つは base64 ライブラリ.go
を呼び出します) と、 ..c
cgo
ラズベリーパイで単独でCコードのみ(その呼び出しとすべてを含む)をコンパイルすると、gcc
構成なしでうまく機能します。
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
。本当にしないでください。誰か助けて。
編集:プロジェクトの構造に関する注意を明確にする:
2 つの C (および対応する H) の 5 つのファイルがあります。
base64.c
#include <math.h>
#include <stdint.h>
#include <stdlib.h>
... // definitions of functions used at project.c
project.c
#include <stdlib.h>
#include <string.h>
#include "base64.h"
... // functions used at project.go
そして1ゴー:
...
// #include <stdlib.h>
// #include <string.h>
// #include "project.h"
// #cgo CFLAGS: -I/usr/include
// #cgo LDFLAGS: -lm
import "C"
...
このことを機能させるには、この宣言のどこを、何を、どのように変更する必要がありますか? そして、なぜ私のx86 Linuxで動作したのですか?