该项目有5个文件,两个小.c文件和其对应的.h(这些文件中的一个是我的代码 – 它会调用其他,这是一个base64库)和一个.去文件,其中要求使用CGO我.C代码.
当我在raspBerry pi中仅使用gcc编译我的C代码(使用其调用和所有内容)时,它没有任何配置.
当我使用go build在我的x86 Linux Ubuntu机器上编译整个go项目时,它也做得很好.
但是当我尝试使用覆盆子pi中的go build编译go项目时,它没有得到我的C库:
fiatjaf@raspBerrypi ~/g/s/b/f/project> go build -xWORK=/tmp/go-build702187084mkdir -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文件
> add // #cgo LDFLAGS:-I /usr/include(我无法发现这些标志的正确用法)
>使用go build -ldflags’-I /usr/include’
我不明白为什么要试图编译-I /usr/lib中/去/包装/ linux_arm base64.c.真的没有.有人帮忙.
编辑:澄清关于项目结构的说明:
它有5个文件,2个C(及其对应的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
和1去:
...// #include <stdlib.h>// #include <string.h>// #include "project.h"// #cgo CFLAGS: -I/usr/include// #cgo LDFLAGS: -lmimport "C"...
在这个声明中,我应该在哪里,什么以及如何改变这个东西?为什么它在我的x86 linux上运行?
解决方法 cgo内联语法go文件中cgo参数的正确语法是:
// #cgo CFLAGS: -I/usr/include
没有#和cgo之间的空格.有关语法的详细信息,请参见cmd/cgo.
-ldflags参数
go -ldflags参数将参数传递给go连接器(5l,6l,8l,…).
即使参数将传递给C链接器,这对您没有任何好处
由于链接器不处理包含,编译器会这样做.
我担心这个参数对你不起作用.所有相关参数都应该
使用#cgo标签在go源文件中配置.
杂项.笔记
如果你正在使用math.h,你很可能需要链接libmath.你可以这样做
将此文件写入您的go源文件:
// #cgo LDFLAGS: -lm总结
以上是内存溢出为你收集整理的编译cgo包时,go build没有找到我的C标准库全部内容,希望文章能够帮你解决编译cgo包时,go build没有找到我的C标准库所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)