如何从谷歌导入和使用CGO Brotli实现?

Adi*_*ngh 8 go cgo brotli

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

import (
    "fmt"
    "io/ioutil"

    cbrotli "github.com/google/brotli/go/cbrotli"
)
Run Code Online (Sandbox Code Playgroud)

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

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>
Run Code Online (Sandbox Code Playgroud)

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

sse*_*lla 6

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

$ mkdir out && cd out
$ ../configure-cmake
$ make
$ make test
$ make install
Run Code Online (Sandbox Code Playgroud)

在构建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
Run Code Online (Sandbox Code Playgroud)

注意:您不需要在结尾处添加"brotli"CGO_FLAGS