我尝试使用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
}
答案 0 :(得分:6)
以下是您的代码的固定版本。注意#cgo LDFLAGS: -lz
与zlib库和小C函数myDeflateInit
链接,它处理deflateInit
是宏而不是函数的事实。另请注意strm
。
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)
}