我试图通过使用 cgo 从 golang 调用 c zlib 来修复 golang 最慢的 zip 实现
但是我得到一个错误
错误:'deflateInit' 未声明(首次在此函数中使用)
deflateInit 定义在 zlib.h 中
我错过了什么吗?感谢您的任何提示。
package main
/*
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include "zlib.h"
*/
import "C"
import (
"fmt"
)
func main() {
fmt.Println("hmmm....")
fmt.Println(int(C.random()))
var strm C.struct_z_stream
fmt.Println(strm)
ret := C.deflateInit(&strm, 5) // trouble here
}
最佳答案
这是您的代码的固定版本。注意 #cgo LDFLAGS: -lz
链接到 zlib 库和小的 C 函数 myDeflateInit
处理 deflateInit
是一个宏而不是函数。另请注意 strm
定义的更改。
不幸的是,从 Go 处理 C 宏相当烦人 - 我想不出比一个小的 C 填充函数更好的方法。
package main
/*
#cgo LDFLAGS: -lz
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include "zlib.h"
int myDeflateInit(z_streamp s, int n) {
return deflateInit(s, n);
}
*/
import "C"
import (
"fmt"
)
func main() {
fmt.Println("hmmm....")
fmt.Println(int(C.random()))
var strm C.z_stream
fmt.Println(strm)
ret := C.myDeflateInit(&strm, 5)
fmt.Println(ret)
}
关于go - 如何将 zlib 包装在 golang 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14686256/