8

我正在尝试从谷歌cbrotli导入和使用实现,如下所示:

import (
    "fmt"
    "io/ioutil"

    cbrotli "github.com/google/brotli/go/cbrotli"
)

但是在尝试运行程序时出现以下错误:

learn-go [master●●] % CGO_CFLAGS="-I /dev/projects/go/learn-go/src/brotli/c/include/brotli" go run cmd/compress/main.go
# github.com/google/brotli/go/cbrotli
src/github.com/google/brotli/go/cbrotli/reader.go:13:10: fatal error: 'brotli/decode.h' file not found
#include <brotli/decode.h>

我不确定如何传递一些 C 标志以确保我可以使用 brotli 实现

4

2 回答 2

6

假设你已经 build 了brotli,如果没有,在他们的 Github 页面中有安装说明:

$ mkdir out && cd out
$ ../configure-cmake
$ make
$ make test
$ make install

在构建你的 Go 应用程序时,你只需要传递-I ~<prefix>/include,你在<prefix>哪里安装brotli. 如果你没有配置这个前缀,它通常在/usr/local.

在此之后,您可以使用以下命令运行:

$ CGO_FLAGS='-I <prefix>/include' CGO_FLAGS='-L <prefix>/lib' LD_LIBRARY_PATH='<prefix>/lib' go run cmd/compress/main.go

注意:您不需要在末尾添加“brotli”CGO_FLAGS

于 2018-11-01T04:32:28.940 回答
0

Go 实现也可用:

package main

import (
   "github.com/andybalholm/brotli"
   "net/http"
)

const in = "https://raw.githubusercontent.com" +
   "/google/brotli/master/tests/testdata/ukkonooa.compressed"

const out = "ukko nooa, ukko nooa oli kunnon mies, kun han meni saunaan, " +
   "pisti laukun naulaan, ukko nooa, ukko nooa oli kunnon mies."

func main() {
   g, e := http.Get(in)
   if e != nil {
      panic(e)
   }
   defer g.Body.Close()
   b := make([]byte, len(out))
   brotli.NewReader(g.Body).Read(b)
   println(string(b) == out)
}

https://pkg.go.dev/github.com/andybalholm/brotli

于 2021-05-24T22:56:49.410 回答