草庐IT

go - C 代码是否享受 Go GC 的碎片预防策略?

关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭4年前。Improvethisquestion更正了错误的暗示:Golang的GC执行虚拟地址空间碎片整理碎片预防策略,这使程序能够运行很长时间(如果不是永远的话)。但似乎C代码(cgo或SWIG)无法更新它的内存指针,以防它们被移动到别处。从这些策略中获益。这是真的吗?C代码不会受益于Golang的虚拟地址空间碎片整理碎片预防,最终得到碎片吗?如果那是假的,怎么办?此外,C代码加载的任何DLL代码(例如WindowsDLL)会怎样?(问题已

windows - 有人可以建议为什么即使 CGO_ENABLED=0,从源代码 (1.4) 构建的 Go 也会因为 GCC 编译错误而失败

在go/src中的make.bat文件中(在解压缩tar之后),甚至在使用CGO_ENABLED检查之前就有一个gcc编译命令。这会扰乱引导工具构建。出于安全原因,我无法通过cygwin或ming在Windows上安装GCC。但是,编译是针对各种.c文件的,这让我不确定下一步该做什么。我修改了源代码和环境变量,尤其是CGO_ENABLED,这应该是我所需要的。然而,make.bat具有令人恼火的小c编译,这似乎让我失望了。这是让我失望的make.bat文件和编译:::CGO_ENABLED:Controlscgousageduringthebuild.Setitto1::toinclu

c++ - 释放 cgo 库的内存

我有点乱,我看不出我是怎么摆脱它的……我得到了什么:*我使用cgo构建的库(dll)。*使用此库(dll)的C++应用程序。我要做什么:我尝试释放在C++应用程序的cgo库中分配的内存。我使用什么工具:要构建库(dll),我使用cgo,然后使用VScmd创建stub库。我使用visualstudio2017编译应用程序(使用/MD)选项。我得到了什么:检测到严重错误c0000374据我所知,这是我释放了在dll库中分配的数据的结果。我会注意到,如果我创建一个测试应用程序并使用gcc对其进行编译,则不会发生这种情况。不幸的是,我无法避免使用VS,因为我正在使用一些更喜欢VS的CUDA东西

Cgo:如何将双数组从 C 返回到 Go

我有这样一个C函数double*c_func(intn_rows){doubleresult[n_rows];for(inti=0;i然后我使用这个Go函数来处理Cdouble://convertCdoublepointertofloat64slice...funcdoubleToFloats(in*C.double,lengthint)[]float64{out:=make([]float64,length,length)start:=unsafe.Pointer(in)size:=unsafe.Sizeof(C.double(0))fori:=0;i这有时有效但有时无效。当它不起作

go - 如何在 cgo 中正确使用 64 位 TDM-GCC?

这个问题在这里已经有了答案:GCCunabletocompileGoProgram(1个回答)关闭5年前。我正在尝试使用github.com/hajimehoshi/ebiten上的库。无论我做什么,我都会遇到这个错误:#github.com/go-gl/glfw/v3.2/glfwcc1.exe:sorry,unimplemented:64-bitmodenotcompiledin#github.com/go-gl/gl/v2.1/glcc1.exe:sorry,unimplemented:64-bitmodenotcompiledin我尝试更新MinGWmingw-getudpat

macos - OS X 10.9 中的 Golang : CGO_ENABLED=0 GOOS=linux GOARCH=arm ERROR

cd/usr/local/go/srcCGO_ENABLED=0GOOS=linuxGOARCH=arm./make.bash#BuildingCbootstraptool.cmd/dist#BuildingcompilersandGobootstraptoolforhost,darwin/amd64.lib9libbiolibmachmisc/pprofcmd/addr2linecmd/covcmd/nmcmd/objdumpcmd/packcmd/profcmd/cccmd/gccmd/6lcmd/5l/usr/local/go/src/cmd/5l/../ld/lib.c:661

go - 在 Go 包中复制数据文件?

我有一个Go包,它使用CFLAGSforcgo链接到C库。反过来,C库需要本地数据文件才能正常工作。它是预建的3d方库,设置数据文件路径的选项不可用。如果包的客户端是本地的并且数据由lib加载,一切都按预期工作,但是当我构建和安装包时,数据文件没有被复制。在安装包时是否可以选择将自定义文件放在go包附近? 最佳答案 Isthereanyoptiontoputcustomfileneargopackagewhileinstallingpackage?不,没有。对不起。这必须通过其他方式解决,例如系统包管理器。

go模块没有正确下载动态库的cgo软链接(soft link)

环境为ubuntu16.0464bit,go版本go1.12linux/amd64我正在尝试将我的golang项目从gopath切换到gomodule。我项目导入的包之一是使用cgo调用ffmpeg,包中有几个动态的ffmpeg库,例如libavcodec.so,libavcodec.so.57,libavcodec.so.57.1​​07.100,前两个文件是软链接(softlink)文件问题是当我去构建我的golang项目时,go模块只下载libavcodec.so.57.1​​07.100,它没有下载两个软链接(softlink)文件我尝试去获取包,并成功获取了包括软链接(sof

c++ - Cgo 找不到像 <iostream> 这样的标准库

我试图在我的Go代码中包含C++代码,但无法识别。我首先认为它认为它是C代码并尝试(并失败)编译这样,但删除包含行实际上给了我这样的C++错误故障排除error:‘cout’isnotamemberof‘std’代码使用g++正确编译。我尝试添加-lstdc++LDLFLAG,并在CXXFLAG中添加库的路径,但它没有改变任何东西。我做了一些其他测试(但都失败了),但这是最小的一个。这是c++文件test.cpp#include"test.hpp"inttest(){std::coutinttest();这是我的go文件//#cgoCXXFLAGS:-I/usr/lib///#cgoL

go - 在 go 项目中使用 cgo 包含 libsodium 失败

我正在尝试包含libsodium进入我的Go项目。为此,我在我的项目中复制了repo//#cgoCFLAGS:-I/mypath/libsodium/src/libsodium/include/sodium//#include//#include"crypto_sign_ed25519.h"import"C"尝试构建项目时出现以下错误:/tmp/go-build/cgo-gcc-prolog:53:undefinedreferenceto`crypto_sign_ed25519_pk_to_curve25519'collect2:error:ldreturned1exitstatus可