草庐IT

CGO_CFLAGS

全部标签

go - 如何从 Go 语言调用此 C 函数(使用 Cgo 工具)

这是这个C函数声明CURL_EXTERNCURLcodecurl_easy_setopt(CURL*curl,CURLoptionoption,...);如何从Go中调用此函数?typeEasystruct{curlunsafe.PointercodeC.CURLcode}func(e*Easy)SetOption(optionC.CURLoption,...){e.code=C.curl_easy_setopt(e.curl,option,????))} 最佳答案 你不能直接调用它。CGO在C端不能很好地与可变参数函数一起使用。理

go - 如何使用伪 CGO 指令在子目录中添加 C 文件作为 go build 的一部分?

根据文档,使用cgo的gobuild将在包的根目录中添加任何C/C++文件作为编译的一部分。有没有办法通过使用CGO指令使给定子目录中的C/C++文件也成为编译的一部分以及根目录中的文件? 最佳答案 不是真的。您唯一的选择是使该子目录成为另一个Go包,但是您必须将您需要的任何功能包装在导出的Go函数中,并将其导入您的项目。C/C++文件的编译对于基本需求来说是一种便利,但任何更复杂的东西都需要单独构建您的源代码,并提供适当的CGO指令以进行链接。Go工具链并不是一个完整的构建工具。 关于

go - 如何使用伪 CGO 指令在子目录中添加 C 文件作为 go build 的一部分?

根据文档,使用cgo的gobuild将在包的根目录中添加任何C/C++文件作为编译的一部分。有没有办法通过使用CGO指令使给定子目录中的C/C++文件也成为编译的一部分以及根目录中的文件? 最佳答案 不是真的。您唯一的选择是使该子目录成为另一个Go包,但是您必须将您需要的任何功能包装在导出的Go函数中,并将其导入您的项目。C/C++文件的编译对于基本需求来说是一种便利,但任何更复杂的东西都需要单独构建您的源代码,并提供适当的CGO指令以进行链接。Go工具链并不是一个完整的构建工具。 关于

multithreading - 使用 Go 1.2 的线程 CGO

编辑:这个问题没有实际意义。我误读了提交日期,它包含在现有版本的Go工具中。谢谢,詹姆斯!似乎即将发布的Go(1.3)将允许non-GothreadstocallCGOcallbacks.我想知道迄今为止,人们通常会做什么来绕过此限制。也就是说,我有一个自己创建线程的第三方库,我想从这些线程中获取一些信息到Go代码中。在代码的“C”端,某种从C线程到Go线程的切换机制?有什么方法可以在不调用Go的情况下将消息放入队列?其他想法? 最佳答案 您突出显示的提交是从去年2月开始的,也就是Go1.1版本之前的提交。它还引用了issue443

multithreading - 使用 Go 1.2 的线程 CGO

编辑:这个问题没有实际意义。我误读了提交日期,它包含在现有版本的Go工具中。谢谢,詹姆斯!似乎即将发布的Go(1.3)将允许non-GothreadstocallCGOcallbacks.我想知道迄今为止,人们通常会做什么来绕过此限制。也就是说,我有一个自己创建线程的第三方库,我想从这些线程中获取一些信息到Go代码中。在代码的“C”端,某种从C线程到Go线程的切换机制?有什么方法可以在不调用Go的情况下将消息放入队列?其他想法? 最佳答案 您突出显示的提交是从去年2月开始的,也就是Go1.1版本之前的提交。它还引用了issue443

macos - 在 Mac OS X 上使用 go 1.3 启用 cgo 进行交叉编译时出现问题

我尝试使用Go1.3在我的darwin/amd64MBP上将cgo代码交叉编译到linux/arm,但没有成功:(我的环境:go版本go1.3darwin/amd64我的目标:针对linux/arm交叉编译cgo代码。第一步:使用ct-ng构建gcc/g++交叉编译器。构建arm-unknown-linux-gnueabi-g++和arm-unknown-linux-gnueabi-gcc的路很长,但我终于做到了。我用简单的C/C++程序进行了测试,输出在我的linux/armR-Pi机器上运行良好。第2步:cd/path/to/go/srcsudoCGO_ENABLED=1CC_FO

macos - 在 Mac OS X 上使用 go 1.3 启用 cgo 进行交叉编译时出现问题

我尝试使用Go1.3在我的darwin/amd64MBP上将cgo代码交叉编译到linux/arm,但没有成功:(我的环境:go版本go1.3darwin/amd64我的目标:针对linux/arm交叉编译cgo代码。第一步:使用ct-ng构建gcc/g++交叉编译器。构建arm-unknown-linux-gnueabi-g++和arm-unknown-linux-gnueabi-gcc的路很长,但我终于做到了。我用简单的C/C++程序进行了测试,输出在我的linux/armR-Pi机器上运行良好。第2步:cd/path/to/go/srcsudoCGO_ENABLED=1CC_FO

go - 为什么我的交叉编译的 CGO 二进制文件不能在 Raspberry Pi (Raspbian) 上运行?

当我编译以下代码片段(playgroundlink)时:packagemain/*#cgoLDFLAGS:-lbluetooth#include#include#include*/import"C"funcmain(){C.hci_get_route(nil)}…使用这些环境变量:CC=arm-linux-gnueabihf-gccCGO_ENABLED=1GOARCH=armGOARM=6我得到一个1.6Mb的二进制文件:在我的ODROID-C1(ARMv7,运行Arch,来自archlinuxarm.org)上工作,但是不适用于我的RaspberryPiB+(ARMv6,运行Ras

go - 为什么我的交叉编译的 CGO 二进制文件不能在 Raspberry Pi (Raspbian) 上运行?

当我编译以下代码片段(playgroundlink)时:packagemain/*#cgoLDFLAGS:-lbluetooth#include#include#include*/import"C"funcmain(){C.hci_get_route(nil)}…使用这些环境变量:CC=arm-linux-gnueabihf-gccCGO_ENABLED=1GOARCH=armGOARM=6我得到一个1.6Mb的二进制文件:在我的ODROID-C1(ARMv7,运行Arch,来自archlinuxarm.org)上工作,但是不适用于我的RaspberryPiB+(ARMv6,运行Ras

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.