草庐IT

CGO_CFLAGS

全部标签

go - 我可以更改 cgo 使用的默认编译器吗?

我正在尝试在ubuntu14.04下执行cgo代码,似乎cgo假设CC/CXX为gcc/g++。而且我需要明确指定CC/CXX才能使用clang。我可以配置通过go的构建约束使用的默认编译器吗?谢谢! 最佳答案 cgo使用的C或C++编译器可以分别使用CC和CXX环境变量指定。例如,要使用Clang:CC=clanggobuildpath/to/cgo/dependent/code.go变量还可以指定要传递给编译器的标志;例如,运行GCC优化:CC="gcc-O2"gobuildpath/to/cgo/dependent/code.

c - Golang (cgo) - 支持带有 cgo 的嵌套结构?

我试图使用cgo为x264库编写一个小包装器,但遇到了嵌套结构的问题。该库使用了许多复杂的结构,其中一些字段本身就是匿名结构。当尝试使用cgo访问这些结构时,我遇到了编译错误,因为go声称嵌套结构不存在。我已经设法将问题归结为一个.h文件和一个粘贴在下面的.go文件。希望这足以说明问题。有人知道这个问题的解决方案或变通方法吗?谢谢。结构.htypedefstructparam_struct_t{inta;intb;struct{intc;intd;}anon;inte;struct{intf;intg;}anon2;}param_struct_t;main.gopackagemain/

c - Golang (cgo) - 支持带有 cgo 的嵌套结构?

我试图使用cgo为x264库编写一个小包装器,但遇到了嵌套结构的问题。该库使用了许多复杂的结构,其中一些字段本身就是匿名结构。当尝试使用cgo访问这些结构时,我遇到了编译错误,因为go声称嵌套结构不存在。我已经设法将问题归结为一个.h文件和一个粘贴在下面的.go文件。希望这足以说明问题。有人知道这个问题的解决方案或变通方法吗?谢谢。结构.htypedefstructparam_struct_t{inta;intb;struct{intc;intd;}anon;inte;struct{intf;intg;}anon2;}param_struct_t;main.gopackagemain/

garbage-collection - 有没有一种安全的方法可以使用 CGo 从 C 代码中保留对 Go 变量的引用?

当使用CGo将C代码与Go交互时,如果我在C端保留对Go变量的引用,我是否会冒着该对象被垃圾收集器释放的风险,或者GC是否会在C端管理的变量?为了说明我的要求,请考虑以下示例程序:去代码:packagemain/*typedefstruct_FooFoo;Foo*foo_new(void);voidfoo_send(Foo*foo,intx);intfoo_recv(Foo*foo);*/import"C"//exportmakeChannelfuncmakeChannel()chanint{returnmake(chanint,1)}//exportsendIntfuncsendIn

garbage-collection - 有没有一种安全的方法可以使用 CGo 从 C 代码中保留对 Go 变量的引用?

当使用CGo将C代码与Go交互时,如果我在C端保留对Go变量的引用,我是否会冒着该对象被垃圾收集器释放的风险,或者GC是否会在C端管理的变量?为了说明我的要求,请考虑以下示例程序:去代码:packagemain/*typedefstruct_FooFoo;Foo*foo_new(void);voidfoo_send(Foo*foo,intx);intfoo_recv(Foo*foo);*/import"C"//exportmakeChannelfuncmakeChannel()chanint{returnmake(chanint,1)}//exportsendIntfuncsendIn

戈朗 : How to link C objects using CGO_OFILES?

因此,我正在拔头发。我想要做的就是将一个.o(C目标文件)与一个Go包链接起来,这样Go包就可以调用C函数。似乎没有关于cgo的CGO_OFILES参数的任何文档,在网上搜索后似乎是我需要的。我试过将它放在Go文件的顶部:/*#cgoCGO_OFILES:doc-capi-tesseract.o#include#include"doc-capi-tesseract.h"*/import"C"但这给了我错误invalid#cgoverb:#cgoCGO_OFILES:doc-capi-tesseract.o。然后我在某处读到可以使用makefile,所以我制作了这个可能不正确的makef

戈朗 : How to link C objects using CGO_OFILES?

因此,我正在拔头发。我想要做的就是将一个.o(C目标文件)与一个Go包链接起来,这样Go包就可以调用C函数。似乎没有关于cgo的CGO_OFILES参数的任何文档,在网上搜索后似乎是我需要的。我试过将它放在Go文件的顶部:/*#cgoCGO_OFILES:doc-capi-tesseract.o#include#include"doc-capi-tesseract.h"*/import"C"但这给了我错误invalid#cgoverb:#cgoCGO_OFILES:doc-capi-tesseract.o。然后我在某处读到可以使用makefile,所以我制作了这个可能不正确的makef

linker - go + cgo 和链接

我想用下面的c作为Go的cgo:#includemain(){XScreenSaverInfo*info=XScreenSaverAllocInfo();Display*display=XOpenDisplay(0);XScreenSaverQueryInfo(display,DefaultRootWindow(display),info);printf("%ums\n",info->idle);}构建:gcc-oidleprintXIdleTime.c-lX11-lXss我为Go的cgo重写了代码:packagetools//#cgopkg-config:x11//#includei

linker - go + cgo 和链接

我想用下面的c作为Go的cgo:#includemain(){XScreenSaverInfo*info=XScreenSaverAllocInfo();Display*display=XOpenDisplay(0);XScreenSaverQueryInfo(display,DefaultRootWindow(display),info);printf("%ums\n",info->idle);}构建:gcc-oidleprintXIdleTime.c-lX11-lXss我为Go的cgo重写了代码:packagetools//#cgopkg-config:x11//#includei

windows - 戈朗 : how can I call win32 API without cgo?

我正在尝试从secur32.dll中调用GetUserNameEx,如下所示:dll,err:=syscall.LoadDLL("secur32.dll")iferr!=nil{log.Fatal(err)}deferdll.Release()GetUserNameEx,err:=dll.FindProc("GetUserNameExW")iferr!=nil{log.Fatal(err)}arr:=make([]uint8,256)varsizeuintGetUserNameEx.Call(3,uintptr(unsafe.Pointer(&arr[0])),uintptr(unsa