3

cgoを使用してgolangからczlibを呼び出すことにより、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
}
4

1 に答える 1

7

これがコードの修正バージョンです。#cgo LDFLAGS: -lzzlibライブラリと、関数ではなくマクロであるmyDeflateInitという事実を処理する小さなC関数とリンクすることに注意してください。deflateInitの定義の変更にも注意してくださいstrm

残念ながら、CマクロはGoから処理するのがかなり面倒です。小さな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)
}
于 2013-02-04T19:05:56.680 に答える