首页 > 解决方案 > 我应该安装什么包而不是 libpcre++-dev 才能在 Alpine Golang 中使用 C 代码?

问题描述

我在 docker 容器中有一个 Golang 程序(我使用 Ubuntu 18)。我还在我的 Golang 应用程序中使用github.com/glenn-brown/golang-pkg-pcre/src/pkg/pcre进行正则表达式。在使用这个库之前,我应该libpcre++-dev这样安装:

sudo apt-get install libpcre++-dev

但是我在我的 Dockerfile 中使用了 golang:alpine,这不是libpcre++-devalpine 包中的库。

我应该安装什么软件包而不是 libpcre++-dev

ps 我已经尝试安装libc6-compat, pcre pcre-devlibpcrecpp但是我看到了这个错误:

github.com/glenn-brown/golang-pkg-pcre/src/pkg/pcre /go/pkg/mod/github.com/glenn-brown/golang-pkg-pcre@v0.0.0-20120522223659-48bb82a8b8ce/src/ pkg/pcre/pcre.go:52:10: 致命错误: pcre.h: No such file or directory #include ^~~~~~~~ 编译终止

我的 Dockerfile:

FROM golang:alpine

RUN apk update
RUN apk upgrade
RUN apk add --update --no-cache build-base gcc g++ pcre pcre-dev libc6-compat

# Install git + SSL ca certificates.
# Git is required for fetching the dependencies.
# Ca-certificates is required to call HTTPS endpoints.
RUN apk update && apk add --no-cache curl git ca-certificates tzdata \
 && update-ca-certificates 2> /dev/null || true

我以这种方式构建我的应用程序:

- CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -ldflags="-w -s" -o bin/backend ./cmd/backend/main.go

编辑

我已经更改了我的 Dockerfile(在下面添加行)

RUN apk add --update --no-cache build-base gcc g++ pcre pcre-dev libc6-compat

现在我有一个新错误:

加载共享库 libpcre.so.1 时出错:没有这样的文件或目录(/bin/backend 需要)

标签: dockergopcrealpinecgo

解决方案


您可以尝试其中一个,因为两个包

RUN apk add --virtual build-dependencies 
RUn apk add --no-cache build-base gcc

build-essential 是一个元包(一个安装许多其他包的包,如 g++ 和 gcc:GNU C 和 C++ 编译器)。

或者你可以安装 alpine sdk。

您可以从 alpine-sdk 开始,它是一个“引入用于构建新包的最基本包的元包”。 http://wiki.alpinelinux.org/wiki/Developer_Documentation有更多信息。

RUN apk add --update alpine-sdk

码头工人高山问题 24

或者您可以使用 golang:latest ,它可以正常工作。

FROM golang:latest
RUN apt-get update 
RUN apt-get install libpcre++-dev -y

推荐阅读