如何解决Docker 的 Cgo 构建设置
我正在使用 cgo 从我的 Go 代码中调用 C 库。我按照以下结构将 .so 和 .h 文件添加到项目中。我可以在本地进行构建,但无法使用构建工具进行构建以获取 Docker 映像。我收到以下错误。你能帮我解决这个问题吗?
/usr/lib64/go/1.14/pkg/tool/linux_amd64/link:运行gcc失败:退出状态1
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: 找不到 -lm_server
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: 找不到 -lpthread
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: 找不到 -lc
文件夹结构:
cmd
--main.go
src
--libs
----m_server.h
----libm_server.so
--internal
----server
------server.go
Yaml 文件:
...
properties:
- docker-params: "--workdir ${env.PWD}/src \
--env HOME=/tmp \
--env GOBIN=${env.PWD}/build \
--env GOCACHE=/tmp/.gocache \
--env GO111MODULE=on \
--env CGO_ENABLED=1"
- golangci-lint-config-yml: ${env.PWD}/golangci.yml
- golang-ldflags: "-w -s -X main.Version=${var.version} -extldflags '-static'"
build:
- task: build
docker-image: go-builder
docker-flags:
- ${docker-params}
cmd:
- sh -c '${go-prepare} && go install -v -a -ldflags="${golang-ldflags}" ./...'
...
C 包装函数的 Go 文件
package server
/*
#cgo CFLAGS: -I../../libs/m_server/
#cgo LDFLAGS: -L../../libs/m_server-lm_server -Wl,-rpath=../../libs/m_server
#include "m_server.h"
*/
import "C"
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。