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

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

概述我正在尝试在树莓派中编译一个go项目. 该项目有5个文件,两个小.c文件和其对应的.h(这些文件中的一个是我的代码 – 它会调用其他,这是一个base64库)和一个.去文件,其中要求使用CGO我.C代码. 当我在raspberry pi中仅使用gcc编译我的C代码(使用其调用和所有内容)时,它没有任何配置. 当我使用go build在我的x86 Linux Ubuntu机器上编译整个go项目时,它 我正在尝试在树莓派中编译一个go项目.

该项目有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>的&lt之前它出现问题了,所以这个问题是不是不存在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标准库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1240703.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存