草庐IT

CGO_ENABLED

全部标签

go - 使用 Cgo 时为 "unexpected R_X86_64_64 relocation for dynamic symbol"

我正在尝试使用Cgo为C库创建绑定(bind)。我有一个使用Cgo导入库并对其进行一些调用的包。它可以很好地编译和安装。但是当尝试从Go程序中使用该包时,我在链接时收到错误“动态符号的意外R_X86_64_64重定位”。有什么想法吗? 最佳答案 它出现在assemblygeneration中6g编译器中的例程:case256+R_X86_64_64:if(targ->dynimpname!=nil&&!targ->dynexport)diag("unexpectedR_X86_64_64relocationfordynamicsym

python - 如何使用cgo在golang中导入cython生成的文件

我将我的python文件用cython化为example.c和example.so我可以将这些文件导出为python模块并访问python中的函数测试.py:importexampleexample.test()这样我就可以轻松地在python中导入我的cythonizedpython文件。我如何使用cgo在golang中类似地导入这些文件? 最佳答案 Cython代码包括一堆代码包装,用于创建python模块并在Python对象和C类型之间进行转换。您可能不需要这些。例如,在cgo中一个非常简单的helloworld可能只是:/*

go - Go语言的cgo如何编译Cuda源码?

我用cuda-c编写了一个简单的程序,它可以在eclipsensight上运行。这是源代码:#include#include__global__voidadd(inta,intb,int*c){*c=a+b;}intmain(void){intc;int*dev_c;cudaMalloc((void**)&dev_c,sizeof(int));add>>(2,7,dev_c);cudaMemcpy(&c,dev_c,sizeof(int),cudaMemcpyDeviceToHost);printf("\n2+7=%d\n",c);cudaFree(dev_c);return0;}现在

linux - cgo (for darwin) 的交叉编译失败

我对Linux还是个新手。我在Linux环境中构建了一个应用程序,它使用基于cgo(https://github.com/mattn/go-gtk/)的gtk库。该应用程序在其native环境(linux64位)中构建良好,但当我尝试为darwin64位编译时,我得到以下结果:#netcouldnotdeterminekindofnameforC.AI_MASK#netcouldnotdeterminekindofnameforC.AI_MASK我用来构建的命令行:envGOOS=$1GOARCH=$2CGO_ENABLED=1gobuild$3$1是darwin,$2是amd64($

go - 使用 cgo,为什么在 golang 输出时 C 输出的不是 'survive' 管道?

我正在尝试使用cgo来使用来自golang的C代码,但在我的hello-world小测试中,我遇到了一些我无法理解或找不到更多信息的东西。我从类似于examplesI'vefound的简单测试开始packagemainimport("fmt""unsafe")/*#import#import*/import"C"funcmain(){go2c:="PrintedfromC.puts"varcstr*C.char=C.CString(go2c)deferC.free(unsafe.Pointer(cstr))C.puts(cstr)fmt.Printf("Printedfromgolan

go - 无效的标志#cgo LDFLAGS 用 go lang 中断构建

我是go-lang的新手。我想使用go命令构建一个名为cryptogen的二进制文件(hyperledger/fabric工具)。我从github下载源代码并根据自述文件键入以下命令:CGO_CFLAGS=""GOBIN=/hyperledger/src/github.com/hyperledger/fabric/build/bingoinstall-tags""-ldflags"-Xgithub.com/hyperledger/fabric/common/tools/cryptogen/metadata.Version=1.0.7"github.com/hyperledger/fab

Golang (cgo) - 任意 void* 接口(interface)

我正在包装一个C库,它有一个带有void*数据字段的结构,可用于任意保存数据。用惯用的Go包装它的最佳方法是什么(如果可能的话)?结构非常简单:typedefstruct_Foo{void*data;}Foo;我希望做这样的事情:typeFooC.Foofunc(f*Foo)SetData(datainterface{}){f.data=unsafe.Pointer(&data)}func(f*Foo)Data()interface{}{return(interface{})(unsafe.Pointer(f.data))}这行不通,而且显然是错误的方法。我已经使用[]byte源成功地

c++ - 在 cgo 库中链接第 3 方静态库

我有一个为C++提供绑定(bind)的Go库OpenImageIO库(OpenImageiGO)。我一直很高兴通过标准动态链接到libOpenImageIO来构建我的绑定(bind),但现在我正在尝试静态链接。我遇到了一个问题,无论我尝试哪种标志组合,外部链接器都会失败并出现大量“undefinedreference”错误。我似乎记得在过去看到过这个问题,说链接器看到符号的顺序有问题。但我似乎无法再次找到此信息。这是我最近一次构建尝试的一个简短示例,试图让它链接到boost、OpenColorIO和OpenImageIO的静态构建:$exportCGO_CPPFLAGS="\-I/pa

go - Cgo:找不到使用带有 const char* 参数的回调的方法

我正在使用Go中的C库,使用Cgo并且除了回调之外一切都很好。库有回调setter,它接受指向回调函数的指针。回调函数本身用go编写并使用Cgo语法导出。问题:我可以使用char*参数创建和导出函数,但不能使用constchar*。代码说明:test.go:packagemain/*typedefvoid(*cb_func)(constchar*,int);voidcallback(cb_func);voidmyFunc(constchar*,int);*/import"C"import("fmt""unsafe")//exportmyFuncfuncmyFunc(buf*C.char

pointers - 戈朗 Cgo : panic: runtime error: cgo argument has Go pointer to Go pointer

我正在使用一个C库,与下面不同,我无法控制它。我需要将指向也包含指针的数组的指针传递给C函数。packagemain/*#includetypedefint*pInt;voidfoo(pIntp[]){printf("foo()\n");}*/import"C"import"unsafe"funcmain(){variC.intvarp1C.pInt=(*C.int)(unsafe.Pointer(&i))varp2C.pInt=(*C.int)(unsafe.Pointer(&i))varps[]C.pInt=[]C.pInt{p1,p2}C.foo(unsafe.Pointer(&