Windows 环境下 Go 语言使用第三方压缩包 gozstd 的报错处理

news2024/9/19 10:14:27

该文章主要记录在windows平台用go语言使用gozstd包时,遇到的错误及处理过程(踩坑之旅)!

一、gozstd简介

gozstd是一个针对Zstandard(简称Zstd)的Go语言包装器,它提供了简单且高效的API,使得开发者能够在Go程序中便捷地进行数据压缩和解压操作。

gozstd可用于数据存储和传输、日志处理、实时流处理、云服务等场景。

gozstd 包的具体详情见:https://pkg.go.dev/github.com/valyala/gozstd#section-readme

二、使用方法及报错处理

1、使用方法

在window10系统中,使用 gozstd 包进行数据压缩,方法如下:

  • 下载 gozstd 包
go get -u github.com/valyala/gozstd
  •  引入 gozstd 包
import "github.com/valyala/gozstd"
  •  调用压缩及解压数据的方法
package main

import (
	"fmt"
	"log"

	"github.com/valyala/gozstd"
)

func main() {
	data := []byte("hello world")
	// 压缩数据
	compressedData := gozstd.Compress(nil, data)
	// 解压数据
	decompressedData, err := gozstd.Decompress(nil, compressedData)
	if err != nil {
		log.Fatalf("cannot decompress data: %s", err)
	}

	fmt.Printf("经过 zstd 压缩及解压后的数据: %s\n", decompressedData)
}

更多用法见:https://pkg.go.dev/github.com/valyala/gozstd#section-readme

2、编译错误处理

在 windows 系统下编译报错:

D:\...\main>go run main.go
# github.com/valyala/gozstd
C:\Users\Administrator\go\pkg\mod\github.com\valyala\gozstd@v1.21.1\stream.go:14:48: undefined: DefaultCompressionLevel
C:\Users\Administrator\go\pkg\mod\github.com\valyala\gozstd@v1.21.1\stream.go:31:59: undefined: CDict
C:\Users\Administrator\go\pkg\mod\github.com\valyala\gozstd@v1.21.1\stream.go:35:64: undefined: CDict
C:\Users\Administrator\go\pkg\mod\github.com\valyala\gozstd@v1.21.1\stream.go:47:20: undefined: Writer
C:\Users\Administrator\go\pkg\mod\github.com\valyala\gozstd@v1.21.1\stream.go:56:22: undefined: NewWriterLevel
C:\Users\Administrator\go\pkg\mod\github.com\valyala\gozstd@v1.21.1\stream.go:101:61: undefined: DDict
C:\Users\Administrator\go\pkg\mod\github.com\valyala\gozstd@v1.21.1\stream.go:110:6: undefined: Reader
C:\Users\Administrator\go\pkg\mod\github.com\valyala\gozstd@v1.21.1\stream.go:117:8: undefined: NewReader

如下图所示: 

经查,在 gozstd 的官方问题列表中,遇到类似的错误,于是尝试着到gozstd包的路径下重编译libzstd.a

cd ../../go/pkg/mod/github.com/valyala/gozstd && make clean libzstd.a

但编译提示 make[2]: cc: No such file or directory,如图:

经查,发现原因是windows系统中没有安装gcc编译器,于是用 cygwin (之前用cygwin安装了make命令)安装相应版本的gcc,结果可以成功 make clean libzstd.a了,如图:

但问题又来了,真是刚踩完一个坑又遇到另一个坑,这次在编译main.go程序时,提示:

# runtime/cgo
gcc_libinit_windows.c: In function '_cgo_beginthread':
gcc_libinit_windows.c:143:27: error: implicit declaration of function '_beginthread'; did you mean '_cgo_beginthread'? [-Werror=implicit-function-declaration]
  143 |                 thandle = _beginthread(func, 0, arg);
      |                           ^~~~~~~~~~~~
      |                           _cgo_beginthread
cc1: all warnings being treated as errors

于是,又开始漫长的搜索之旅,找到别人之前踩过类似的坑,文章地址为:runtime/cgo: gcc_libinit_windows.c:136:27: error: implicit declaration of function '_beginthread' · Issue #59490 · golang/go · GitHub

有人建议删除其他gcc环境,改用tdm-gcc。

于是抱着试一试的态度,下载并安装 tdm-gcc(tdm-gcc), 参考了文章:Windows最好用的gcc/g++编译器Tmdgcc_tdm-gcc-CSDN博客

安装完tdm-gcc后,编译main.go,成功,如图:

 

分析原因:原来gozstd用了c编写,GO项目引用gozstd包后,编译会用到 c 语言编译器,即gcc,之前估计安装的gcc版本问题,导致各种报错。

最终解决方法:安装 tdm-gcc 编译工具!

注:为了测试这个问题,我专门在虚拟机中的centos7系统下安装了go环境,引入gozstd包,在linux环境下编译,一切正常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2056473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

金山云Q2调整后EBITDA率提升至3.2% 高质量发展驱动经营质效双增

8月20日,金山云公布了2024年第二季度业绩。 季度内,金山云整体业绩延续向好态势,实现收入规模、盈利能力、经营现金流的联动共赢。财报显示,金山云Q2营收18.9亿元,公有云实现收入12.3亿元,行业云实现收入6…

The Sandbox 新提案: 2024 年亚洲和拉丁美洲区块链活动预算

理事会建议: 积极 🙂 内容 此提案请求为2024年第四季度,The Sandbox 在东南亚和拉丁美洲的主要区块链活动中的激活分配 94,500 美元的 SAND 倡议预算。(具体活动列表见下方活动描述) 原因 区域团队希望在这些现场活…

国际校企合作|深信服、常州信息职业技术学院、马来西亚汽车工业大学三方国际化人才培养合作签约仪式圆满成功

2024年8月19日,深信服科技股份有限公司与常州信息职业技术学院、马来西亚汽车工业大学正式签署了具有里程碑意义的国际校企合作协议。此次签约不仅是“教随产出、校企同行”理念的一次成功实践,更是中马两国友谊与合作的象征。 常州信息职业技术学院党委…

面试题目:(4)给表达式添加运算符

目录 题目 代码 思路解析 例子 题目 题目 给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target &#xff0c;在 num 的数字之间添加 二元 运算符&#xff08;不是一元&#xff09;、- 或 * &#xff0c;返回 所有能够得到 target 的表达式。1 < num.length &…

【JVM】深入理解类加载机制(一)

深入理解类加载机制 Klass模型 Java的每个类&#xff0c;在JVM中都有一个对应的Klass类实例与之对应&#xff0c;存储类的元信息如:常量池、属性信息、方法信息…从继承关系上也能看出来&#xff0c;类的元信息是存储在元空间的。普通的Java类在JVM中对应的是InstanceKlass(C)…

便利店(超市)管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家&#xff0c;服务很多代码文档&#xff0c;百分百好评&#xff0c;战绩可查&#xff01;&#xff01;入职于互联网大厂&#xff0c;可以交流&#xff0c;共同进步。有保障的售后 代码参考数据库参…

层次聚类算法原理及Python实现

层次聚类算法&#xff08;Hierarchical Clustering Method&#xff09;是一种基于簇间相似度在不同层次上分析数据&#xff0c;从而形成树形聚类结构的算法。它主要分为两种形式&#xff1a;凝聚层次聚类&#xff08;自下而上&#xff09;和分裂层次聚类&#xff08;自上而下&a…

ansible --------拓展

编辑 hosts 配置文件 [rootmo ~]# vim /etc/ansible/hosts # 创建目录 [rootmo ~]# mkdir /etc/ansible/playbook # 编辑配置文件 [rootmo ~]# vim /etc/ansible/playbook/nginx.yml # 执行测试 [rootmo ~]# ansible-playbook /etc/ansible/playbook/nginx.yml roles 修…

C# asnyc和await

asnyc和await是什么? 异步编程是一种编程范式&#xff0c;C#中的异步编程可以通过Thread,TheadPool,Task,async/await等来实现。 await能等待什么? 不能等待同步代码&#xff0c;只能等待Task或异步方法&#xff0c;且异步方法必须有返回值&#xff0c; async/await的出现…

遇到BUG怎么分析,全方位带你分析

软件测试的目的是尽可能早地找出软件产品中潜藏的缺陷&#xff0c;并确保其得以修复。所以缺陷的分析就会变得很关键&#xff0c;那么如何来分析缺陷呢&#xff1f; 根据缺陷的定义描述准则&#xff1a; 所有不满足需求或超出需求的都是缺陷。缺陷的判定主要的依赖点在于产品…

配置oss cdn加速静态资源访问 阿里云

效果对比 配置cdn下载速度对比 步骤 1: 登录阿里云控制台控制台主页&#xff0c;找到并点击“对象存储 OSS” 创建存储空间&#xff08;Bucket&#xff09; 设置权限 步骤 2: 获取外网访问地址 步骤 3 在 CDN 中使用该地址 复制该外网访问地址 打开全站加速 DCDN/域名管理 添…

【LeetCode热题100】双指针

class Solution { public:void moveZeroes(vector<int>& nums) {int dst -1,cur 0;while(cur<nums.size()){if(nums[cur] 0){cur;}else{swap(nums[dst1],nums[cur]);cur;dst;}}} }; 题目分析&#xff1a;对于数组分块/数组划分的问题&#xff0c;我们可以使用双…

Jmeter请求发送加密参数详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 最近在做http加密接口&#xff0c;请求头的uid参数及body的请求json参数都经过加密再发送请求&#xff0c;加密方式为&#xff1a;ase256。所以&#xff0c;jmeter…

社区志愿者服务系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家&#xff0c;服务很多代码文档&#xff0c;百分百好评&#xff0c;战绩可查&#xff01;&#xff01;入职于互联网大厂&#xff0c;可以交流&#xff0c;共同进步。有保障的售后 代码参考数据库参…

【AI落地应用实战】Amazon SageMaker JumpStart 体验零一万物的 Yi 1.5 模型

目录 一、前言1.1、Amazon SageMaker JumpStart1.2、Yi-1.5 9B Chat 模型 二、Yi 1.5实践流程2.1、准备SageMaker Studio环境2.2、部署Yi-1.5-9B模型2.3、运行推理Yi-1.5-9B模型 三、体验总结 中国大模型公司零一万物发布开源大模型Yi-1.5&#xff0c;包含多个版本。同时发布多…

YOLOv8轻量化改进之slimneck

目录 一、原理 二、代码 三、修改到YOLOv8中 四、yaml文件修改 一、原理 论文地址:2206.02424 (arxiv.org) 主要模块的网络结构 二、代码 slimneck的代码如下,slimneck主要由GSConv和VoVGSCSPC两部分组成。 class GSConv(nn.Module):# GSConv https://github.com/Alan…

分布式高可用架构设计

一、限流 1、单机限流 如图&#xff0c;应用C的资源c/x被上游的应用A和应用C并发访问&#xff0c;应用C的系统能力支持c/x资源最高5000/qps的访问量&#xff1b;为了不让高并发流量或尖峰流量压垮应用C&#xff0c;可以针对应用C的资源c/x做限流&#xff1b;比如设置限流4500…

为什么会有浮毛猫毛?这些不容忽视的危害宠物空气净化器能解决!

很多人看到朋友家可爱的猫猫狗狗&#xff0c;自己也心痒痒想要养一只。但一想到宠物可能会带来的掉毛、体臭等问题&#xff0c;又犹豫不决。诚然&#xff0c;养宠物确实会对室内空气造成一定影响&#xff0c;但养宠人的共识是&#xff1a;那份与宠物共度的快乐时光&#xff0c;…

mysql索引探索

《令人困惑的mysql索引》在这篇文章中&#xff0c;遗留了几个困惑。为了解决这些困惑&#xff0c;我又进行了一些测试。 本文中索引的建立&#xff0c;并不一定科学&#xff0c;查询的SQL也不一定科学&#xff0c;只是为了理解mysql索引建的一些测试数据。 CREATE TABLE cms_…

加密与安全_双向RSA+AES加密及Code实现

文章目录 AES / RSA流程Code生成AES密钥 和 生成RSA密钥对AES工具类&#xff0c;提供AES加密和解密功能RSA加密工具类测试类 总结 AES / RSA AES&#xff1a;一种对称加密算法&#xff0c;意味着加密和解密使用相同的密钥。速度快&#xff0c;适合加密大量数据。RSA&#xff1…