草庐IT

cgo_unix

全部标签

c++ - 如何将 CGO 用于具有条件内联函数的头文件?

我目前正在为Capi编写一个Go包装器,其中包含带有此ifdef的header:#ifdef__cplusplus#defineTEST_INLINEinline#else#defineTEST_INLINE#endifTEST_INLINEintcallC_inline(){return1;}不幸的是,我无法更改header,因为它是第三方代码。如果我将-Wl,--allow-multiple-definition传递给链接器,代码可以正常编译,但我认为这是一种不好的做法。所以,我感兴趣的是有没有我可以传递给CGO的标志或技巧来满足#ifdef__cplusplus条件?编译异常:C

go - 长时间运行的 cgo 函数调用超时

我目前正在开发一个程序,该程序使用带有cgo的c库调用长时间运行的函数。我无法使用c编辑库以允许超时。到目前为止,我唯一的解决方案是让僵尸goroutine继续运行funcTimeout(timeouttime.Duration,runFuncfunc())bool{varwg=new(sync.WaitGroup)c:=make(chaninterface{})wg.Add(1)gofunc(){deferclose(c)wg.Wait()}()gofunc(){runFunc()c长时间运行的功能可以正常工作,但这是针对长时间运行的服务器,随着时间的推移可能会导致大量内存泄漏/浪费

c - 使用 cgo 构建共享对象时导出变量

我想使用带有选项gobuild-buildmode=c-shared的Go/Cgo构建一个.so库。函数导出良好,但我无法导出变量。我需要实现一个API,它通过调用一个void函数来工作,该函数设置各种全局属性的值。像这样:var(Gval1intGval2string//GvalN)funcf(){Gval1=1Gval2="qwerty"}.solib的客户端将运行f();之后,它可以通过寻址变量的名称来获取变量。我怎样才能导出它们?我曾尝试过这样的把戏:golangcgocan'texportvariablesbybuildmodec-shared,但没有成功(示例始终返回0,而

go - 我可以假设 unix 时间戳将随着 go 增加吗?

例子...funcMakeTimestamp()int64{returntime.Now().UTC().UnixNano()/int64(time.Nanosecond)}这将创建类似于1539222678608597000我将这些数据存储在mongodb上,我最终会使用类似的东西:db.getCollection('xxxxx').find({"timestamp":{$lte:1539194688262205259,$gte:1539176688262205057}},{"venue":1},{"product":0})https://play.golang.org/p/--rH

unix - 如何在 golang 中实现类似于 unix 中的 cat 的文本流?

我想实现一个版本的cat和golang,并修改它来制作其他有用的程序 最佳答案 您可以从一个很酷的项目中汲取灵感go-coreutils.它具有核心GNU命令行实用程序的Go实现,例如cat和许多其他实用程序。Hereiscat,例如。 关于unix-如何在golang中实现类似于unix中的cat的文本流?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/54612242/

go - CGO中的C NULL类型

我有一个C函数,它在发生异常时返回NULL。我如何在Go中检查返回值是否为NULL,因为它没有内置类型来表示CNULL。下面是我的代码retVal:=C.myfunc()ifretVal==nil{//handletheerror} 最佳答案 我认为您可以使用nil来测试c函数是否返回NULL。试试下面的代码:packagemain/*#include#includeint*cfunc(inti){if(i==0){returnNULL;}int*p=(int*)malloc(sizeof(int));*p=100;returnp;

Mongodb unix 套接字与官方 mongo-go-driver 的连接?

找不到任何关于unix域套接字连接支持官方mongo-go-driver的信息。它是否得到官方实现和支持?“mongodb:///tmp/mongodb-27017.sock”uri不起作用。 最佳答案 Isitimplementedandsupportedofficially?使用官方MongoDBGodriver您可以直接连接到URI套接字。您只需要转义斜线即可。例如使用v1.1+:mongoURI:="mongodb://%2Ftmp%2Fmongodb-27017.sock"client,err:=mongo.NewClie

golang 系统日志故障 : Unix syslog delivery error

我在运行Mavericks10.9.2的OSX上。我正在尝试让我的Revel应用程序记录到系统日志。我的代码在此行失败:sysLog,err:=syslog.New(syslog.LOG_NOTICE|syslog.LOG_LOCAL0,"myApp")出现此错误:Unixsyslogdeliveryerror系统日志肯定在我的机器上运行。可能是什么问题? 最佳答案 验证系统日志是否正在运行或启用它。$ps-aux|grepsyslogroot117030.00.4144241992-IsJ9:17AM0:00.01/usr/sbi

gcc - golang 在使用和不使用 cgo 进行构建时使用的汇编程序

假设我有一个golang包,其中包含一些汇编代码:demopkg/source1.gosource2.goasm_amd64.s如果我尝试使用gobuild构建它,工具链将使用gotoolasm来组装*.s文件。但是如果我将Cgo添加到混合物中,通过将单个import"C"放入任何源代码,go将切换到gcc汇编程序。我可以通过执行gobuild-n看到它。第一种情况下对/usr/local/go/pkg/tool/linux_amd64/asm的调用被对gcc的调用所取代。除此之外,它开始提示语法错误。是否记录了此行为,以便我可以依靠它来维护我的包?我可以强制gobuild使用一个确切

无法在 Golang 应用程序中使用已使用 cgo 编译的 C 库?

我正在尝试用Golang包装一个C库。我试图在已编译的库中调用C函数。我有一个.a文件和一个.so库文件。我需要在哪里放置库文件以及如何告诉cgo我正在使用这些库?我是C语言的新手。如有任何帮助,我们将不胜感激。 最佳答案 我将用这个示例来解释它:首先使用./libs/m.c构建libhello.a:#includeexternuint64_tAdd(uint64_ta,uint64_tb){returna+b;}对于此测试示例,libhello.a位于./libs/中:m.go└───libsm.clibhello.a然后gobu