I'm trying to compile a go project in a raspberry pi.
The project has 5 files, two small .c
files and its counterparts .h
(one of these files is my code -- it calls the other, which is a base64 library) and a .go
files which calls my .c
code using cgo
.
When I compile my C code only (with its calls and everything) with gcc
alone at the raspberry pi it does well without any configuration.
When I compile the entire go project on my x86
Linux Ubuntu machine with go build
, it also does pretty well.
But when I try to compile the go project with go build
in the raspberry pi it doesn't get my C libraries:
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
(If I put the <stdlib.h>
before the <math.h>
the problem occurs for it too, so the problem is not the absence of math.h, I think)
I tried to:
// #cgo CFLAGS: -I/usr/include
to the .go
file// #cgo LDFLAGS: -I/usr/include
(I can't discover what is the proper usage of these flags)go build -ldflags '-I/usr/include'
I don't understand why go is trying to compile base64.c with -I /usr/lib/go/pkg/linux_arm
. Really don't. Someone help.
It has 5 files, 2 C (and its counterparts H):
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
and 1 Go:
...
// #include <stdlib.h>
// #include <string.h>
// #include "project.h"
// #cgo CFLAGS: -I/usr/include
// #cgo LDFLAGS: -lm
import "C"
...
Where, what and how should I change in this declarations for this thing to work? And why did it worked on my x86 linux?
It seems my problem was something related to not having set the CGO_ENABLED
flag.
I don't know for sure, but it seems, because I uninstalled my Go from the Raspbian repositories (which seems to come with CGO disabled by default) and installed Go from source (just like I had made in my x86 Linux) then it started to work.