docker - 我应该安装什么包而不是 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++-dev
alpine 包中的库。
我应该安装什么软件包而不是 libpcre++-dev
?
ps 我已经尝试安装libc6-compat
, pcre pcre-dev
,libpcrecpp
但是我看到了这个错误:
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 需要)
解决方案
您可以尝试其中一个,因为两个包
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
或者您可以使用 golang:latest ,它可以正常工作。
FROM golang:latest
RUN apt-get update
RUN apt-get install libpcre++-dev -y
推荐阅读
- javascript - 未设置背景颜色
- ios - IOS 中 Dismiss Modal View Controller 并同时 Segue 从发送到不同的 View Controller
- java - 如何在 Java Web 应用程序中捕获公式并支持公式评估
- raspberry-pi3 - 带屏幕的树莓派上的 Android Things 1.06
- javascript - 是否可以“暂停”发送消息以检查它?
- python - 如何将 NumPy 链接到 Eigen3、OpenBLAS、GotoBLAS2、ATLAS?
- express - Passport JWT 使用 cookie 进行身份验证
- android - Android:热点手机和使用它的手机上的数据使用量之间的差异
- c++ - 如何访问 QNetworkReply->readAll()?
- php - phpexcel下载显示病毒内容警告