草庐IT

CGO_CFLAGS

全部标签

docker - 如何禁用 CGO 以运行测试

我使用Docker将我的项目添加到其中,现在我想对其运行一些测试,但出现测试失败的错误知道我错过了什么吗?#buildstageFROMgolang:1.11.1-alpine3.8ASbuilderRUNapkadd--update--no-cachemake\gitADDhttps://github.com/golang/dep/releases/download/v0.5.0/dep-linux-amd64/usr/bin/depRUNchmod+x/usr/bin/depRUNmkdir-p$GOPATH/src/github.company/user/go-applicati

go - 在 Golang 包中编译 CGO 文件

我正在尝试使用CGO将C文件与Golang包捆绑在一起。按照此处的说明操作:https://karthikkaranth.me/blog/calling-c-code-from-go/http://akrennmair.github.io/golang-cgo-slides/#1https://golang.org/cmd/cgo/我收到这个错误:#mainsrc/main/main.go:16:8:couldnotdeterminekindofnameforC.freesrc/main/main.go:23:10:couldnotdeterminekindofnameforC.gre

go - 在 Go 包中持久设置 CGO_CFLAGS?

我的Go包包含一个.c文件,该文件使用需要特定CFLAGS集的库。在“goinstall”的命令行上,我可以用所需的标志指定CGO_CFLAGS,一切正常。但是,我想这样做,以便有人可以“获取”我的包并构建它而无需传递任何额外的命令行参数。Go打包系统是否提供了一个地方让我可以像这样放置一些配置,以指定一些在goinstall包时总是需要的参数?(我知道在Go源文件中执行#cgoCFLAGS:指令,但记得在我的包中我有一个.c源文件所以需要CGO_CFLAGS设置到整个构建过程) 最佳答案 cgo在构建期间将您的#cgoCFLAGS

go - 你如何供应带有 Cgo 绑定(bind)的 Go 库?

我有一个Go1.5应用程序,它使用cgo与C库(GEOS、FWIW)绑定(bind)。我需要做的是供应它,以便它最终可以通过我们的持续集成系统进行部署。问题是我不知道如何说服链接器在出售后与库链接。运行godep后,带有cgo指令的文件是.../vendor/.../geos.go。我在那里创建了一个lib目录,添加了来自GEOS的五个.so文件,并将序言更改为以下内容:/*#cgoLDFLAGS:-L${SRCDIR}/lib-lgeos_c#include"geos.h"*/import"C"这只在一定程度上起作用——当我运行gobuild时,它找到了第一个库,但没有找到任何后续库

gcc - "go get"不只是获取文件然后 cgo +"go build"它们吗?显然不是

我在构建一个相当简单的本地CGO项目时遇到了问题。考虑thisverysmallCGOpackage只有3个文件(glut.go、support.c和support.h文件)——如果我只是去获取它,这些文件将下载到C:\Go\src\pkg\github.com\zombiezen\Go-GLUT\glut然后一些神秘的魔法发生了,goget构建了以下输出文件:C:\Go\pkg\windows_amd64\github.com\zombiezen\Go-GLUT\glut.a但是,如果我将这三个源文件复制到\mytmp,cd到\mytmp并gobuild-oglut.aglut.go

c - 如何解决函数调用中更改指针值的问题?这是一个cgo错误吗?

我这样通过cgo调用C函数:var_outptr_7C.doublevar_outptr_8C.doublevarkkuintptr=uintptr(unsafe.Pointer(&_outptr_7))gogsl.InitializeGslFunction(f)_result:=int32(C.gsl_integration_qags((*C.gsl_function)(unsafe.Pointer(f.CPtr())),C.double(a),C.double(b),C.double(epsabs),C.double(epsrel),C.size_t(limit),(*C.gsl_

c++ - 如何使用 SWIG 和 CGO 将 io.Reader 转换为 std::istream?

我正在尝试使用SWIG为使用std::istream读取二进制数据的C++API创建Go包装器。我希望能够将io.Reader传递给这些API,但我不确定如何在它和std::istream之间创建映射。我知道我需要实现一个std::streambuf子类,我假设其余部分将涉及Controller和类型映射,但我对SWIG不够熟悉,无法找出正确的组合。有什么想法吗? 最佳答案 io.Reader过于笼统,无法传递给C函数——它可能根本无法支持真实文件(它只是一个实现Read(...)函数的类)你可以做的(只要你不在windows上)是

go - 将 Go 与 cgo 和 Xlib 一起使用时出错

我试图在cgo的帮助下将C代码重写为Go,但是在尝试运行go代码时它给了我一些错误,我不知道如何解决。该代码允许在Linux桌面上获取鼠标点击的坐标。C代码:#include#include#include#includeintmain(){intx=-1,y=-1;XEventevent;intbutton;Display*display=XOpenDisplay(NULL);if(display==NULL){fprintf(stderr,"CannotconnecttoXserver!\n");exit(EXIT_FAILURE);}Windowroot=XDefaultRoot

c - golang cgo 检查C函数是否存在

我正在通过CGO链接一个库,并不是所有的实现或版本都有我想在可能的情况下使用的功能——即函数intfeature(void)的存在。有没有一种方法可以在尝试调用之前检查此符号是否已定义?任何尝试使用C.feature()都会在不支持该功能的库版本的系统上导致构建失败。如果不清楚,我想针对许多平台进行构建,这些平台可能具有也可能不具有该功能。我想我要么需要能够在运行时检查函数是否存在(更理想),要么使用go:generate进行检查并根据发现的内容更改代码(不太理想)).无论哪种方式,我都不太确定具体如何进行。 最佳答案 大多数库都带

cgo 我需要为 C 函数返回的变量释放内存吗?

我是cgo的新手,有几个关于内存管理的问题。假设我有一个简单的c函数,如下所示:char*get_str_in_arr(char**charArr,size_ti){returncharArr[i];}我是否需要如下释放内存:funcdoSomething(){cStr:=C.get_str_in_arr(feats,C.size_t(1))goStr:=C.GoString(cStr)deferC.free(unsafe.Pointer(cStr))...}如果是这种情况,我是否需要对从方法返回的任何变量执行此操作。例如c结构、uint32_t、...等