CGO_ENABLED 如何影响动态链接和静态链接?

2024-04-12

我们正在编译要在 docker 上运行的 Go 代码,并且正在调查为什么我们的二进制文件没有执行。我们发现它缺少一些动态库(尽管我们想要静态链接的二进制文件)。

这就是它的编译方式。

env GOOS=linux CGO_ENABLED=1 GO111MODULE=on GOPRIVATE=github.com/ourrepo GOPROXY=https://proxy.golang.org go build --installsuffix cgo --ldflags='-extldflags=-static' -o program main.go

使用same构建命令与CGO_ENABLED=0最终解决了问题,并且输出二进制文件被静态链接。

现在奇怪的是我们有另一个程序正在使用相同的构建命令,这次与CGO_ENABLED=1而且...它是静态链接的!

所以我很困惑为什么在某些情况下CGO_ENABLED=1产生动态链接,有时也产生静态链接。很高兴提供更多细节。


一些 Go 包在底层使用 CGO,利用(非常)通用的 C 库来实现跨环境和运行时遇到的边缘情况的更广泛兼容性。

这些通用库可以在大多数主要操作系统发行版上找到 - 但显然不包含在 Scratch 映像中(本质上是完全空的)。

CGO_ENABLED默认设置为 1,这意味着必须显式禁用它CGO_ENABLED=0为了避免它,即使使用-static flag.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CGO_ENABLED 如何影响动态链接和静态链接? 的相关文章

  • Golang - 如何在特定时间执行函数

    我需要在一天中的特定时间运行一个函数 例如 0010 0610 1210 1810 我目前的方法使用自动收报机for range time Tick 21600 time Second 我以这些时间间隔之一 例如 1210 手动启动该程序
  • 将 Base64 字符串转换为 JPG

    我正在得到图像为 base64 字符串 dataurl 下面是我的函数 它将dataurl进入图像 现在 如果图像是 png 则 png 库将创建图像 而 jpg 库将引发错误 反之亦然 问题是当我上传 png 时效果很好 但是当我上传 j
  • 将接口转换为结构体

    type SipField interface Info id name defaultValue string length int type Field string func f Field Get string return str
  • 从恐慌中恢复的程序未按预期退出

    根据我的理解 当恐慌恢复时 我期望程序退出并表现出正常行为 但事实并非如此 我期望最后一行打印 程序结束 是正确的吗 如果出现运行时错误 它不会被打印 是吗 package main import fmt func main defer f
  • Airbrake 抛出错误“pybrake - 错误 - strconv.ParseInt:解析“None”:无效语法”

    我正在尝试按照中描述的步骤在 Django 项目中使用 Airbrake 记录器https github com airbrake pybrake django integration https github com airbrake p
  • 如何获取字段类型的零值

    我有一个包含许多字段的结构 我已经弄清楚如何使用反射提取字段名称 值和标签信息 我还想做的是确定字段的值是否与字段的默认值不同 目前 我有这个 有效 但有点臭 qsMap make map string interface var defa
  • 如何更新任意go结构的所有字符串字段?

    我尝试编写一个函数来更新所有字符串字段随意的结构体 像这样 type Student struct Name string Age int func SetStringField obj interface reflect ValueOf
  • 从头开始使用映像部署无法启动

    我正在使用以下内容构建图像Dockerfile FROM golang 1 19 2 bullseye as builder COPY src src WORKDIR src RUN CGO ENABLED 1 go build race
  • 空或不需要的结构字段

    我有两个结构体 代表将插入到 mongodb 数据库中的模型 一个结构 投资 将另一个结构 集团 作为其字段之一 type Group struct Base Name string json name bson name type Inv
  • 在 Go 中将 float 转换为 int 时如何舍入到最近的 int

    将 float 转换为 int 时 小数点将被丢弃 有什么干净的方法可以将其四舍五入到最接近的整数 x int 3 6 应等于 4 而不是 3 int f 0 5 如果 gt 5 将导致向上舍入
  • 如何检查我的 golang 应用程序是否使用 Boringcrypto 而不是本机 golang crypto?

    上下文 我正在阅读多篇有关使我的 golang 应用程序符合 FIPS 要求的文章 换句话说 使我的应用程序使用 Boringcrypto 而不是本机 golang crypto https kupczynski info posts fi
  • 如果覆盖率低于一定百分比,则单元测试失败

    我制作了一个执行的 makefilego test cover 是否有可能失败make unit tests如果覆盖范围低于 X 则命令 我该怎么做呢 您可以使用TestMain在你的测试中做到这一点 TestMain 可以充当测试的自定义
  • 为什么我不能执行 fmt.Sprintf("%d.%d.%d.%d", a...)?

    我正在学习 Go 但我一直坚持 Go 之旅 exercise stringer go https tour golang org methods 7 https tour golang org methods 7 这是一些代码 type I
  • 在 Go 中修改导入的库

    我的问题 弹性节拍 https www elastic co products beats是一个用 Go 编写的日志传送程序的开源项目 它具有多种日志输出功能 包括控制台 Elasticsearch 和 Redis 我想将我自己的输出添加到
  • Cgo 生成的源无法在 MVC 上编译

    我有一个用 CGo 制作的共享库 它在 Linux 和 Android 上链接得很好 但是 当使用 Microsoft Visual Studio 2017 在 Windows 10 上进行编译时 出现以下错误 Microsoft R Pr
  • 在 Alpine 中找不到运行时/cgo

    In an alpine edge我安装的容器通过 RUN apk add no cache musl dev go 我试着跑go get github com golang protobuf protoc gen go then 这会导致
  • Go 中数组的嵌套结构

    我已经开始使用https mholt github io json to go https mholt github io json to go 将 API JSON 转换为 go 结构 我真的很喜欢它 但是我对如何初始化如下所示的报告定义
  • Go 中的切片分块

    我有一个切片 其中包含约 210 万条日志字符串 我想创建一个切片切片 其中字符串尽可能均匀分布 这是我到目前为止所拥有的 logs is a slice with 2 1 million strings in it var divided
  • 如何通过名称获取函数地址?

    我想通过名称获取函数的地址 例如 目前我正在使用dlsym unsigned long get func addr const char func name return unsigned long dlsym NULL func name
  • golang从sdin扫描一行数字

    我正在尝试从标准输入读取输入 3 2 1

随机推荐

  • 使用 pyttsx3 模块向语句添加语音时出现“VoiceAge”错误

    我基本上是在聊天机器人的帮助下开发一个聊天机器人 现在为了向机器人给出的响应添加语音 我使用了 pyttsx3 模块 但最终结果是这样的 我什至尝试将这个模块实现为其他声音 因为它显示有 3 个声音可用 engine pp init voi
  • 将 numpy.array 对象转换为 PIL 图像对象

    我一直在尝试使用 Image fromarray 将 numpy 数组转换为 PIL 图像 但它显示以下错误 回溯 最近一次调用最后一次 文件 C Users Shri1008 Saurav Das AppData Local Progra
  • 自动启用从 Internet 访问端口 4900 的方法

    我正在编写一个在端口 4900 上运行的自定义 p2p 程序 在某些情况下 当用户位于路由器后面时 无法从互联网访问该端口 是否有一种自动方式可以从互联网访问该端口 我不太确定其他 p2p 应用程序是如何工作的 有人能解释一下吗 简而言之
  • C++ 类,其基类和循环包含 [重复]

    这个问题在这里已经有答案了 文件 1 foo h ifndef FOO H define FOO H include baseclass h include bar h class Bar class Foo public baseclas
  • 如何让 div 在滚动到屏幕顶部后粘在屏幕顶部?

    我想创建一个 div 它位于内容块下方 但是一旦页面滚动到足以接触其顶部边界 它就会固定在适当的位置并随页面滚动 您可以简单地使用 css 将元素定位为fixed https developer mozilla org en US docs
  • 在 mongoDB 中的同一 API 中并行查询同一文档

    我有一个用打字稿编写的 API 我尝试使用 Promise allsettled 对同一文档运行并行查询 但它的性能更差 我猜它们是按顺序运行的 有没有办法在 mongoDB 的同一连接中对同一文档执行并行查询 这是代码 console t
  • 绑定值未传递给 WPF 中的用户控件

    我仔细观察了很久 却被困住了 我试图通过 Window 的绑定将参数从 Window 传递到 UserControl1 在 MainWindow 中 UserControl1 被包含两次 一次通过 MyValue 上的绑定传递参数 MyCu
  • 如何使用 jpa 规范添加不同的属性进行查询

    我正在使用 jhipster 标准和 jpa 规范来实现研究端点 嗯 它正在工作 但请继续向我发送副本 此型号有前置 public class Prestation extends AbstractAuditingEntity implem
  • 删除字符串开头和结尾的换行符

    我注意到 trim 不会从字符串的开头和结尾删除换行符 因此我尝试使用以下正则表达式来完成此操作 return str replace s n s n g 这并没有删除新的线条 我担心我已经超出了我的能力范围 EDIT字符串是用 ejs 生
  • 使用 jQuery 实现打字机效果

    编辑 我并没有真正问我原来问题中应该问的所有问题 为了帮助寻找类似答案的人更容易找到答案 问题最终是这样的 如何制作带有闪烁光标的打字机效果 该光标在语句末尾暂停 擦除语句并写入新语句 看看下面 Yoshi 的回答 它正是这样做的 demo
  • Android jetpack 导航组件对话框结果

    到目前为止 我仅使用导航组件即可成功导航到对话框并返回 问题是 我必须在对话框中执行一些操作并将结果返回到调用对话框的片段 一种方法是使用共享视图模型 但为此我必须使用 of activity 这会让我的应用程序有一个单例占用内存 即使我不
  • 如何在图像视图上画一个圆圈

    如何在用户触摸图像的位置在图像上绘制一个圆圈 图像是使用imageview设置的 我在网上找到了一种解决方案 它在新画布上创建图像位图并在其上绘制圆圈 解决方案位于http joerg richter fuyosoft com p 120
  • 将您的 Web 应用程序发布到野外

    假设您已经编写了下一个社交网络现象 或任何其他网络应用程序 您已选择 Java Tomcat Apache 和 Oracle 或您喜欢的任何设置 您知道希望将其发布到网络上并让人们注册并开始使用它 对于您在家中编写并希望将其传播到野外的东西
  • 比较两个数据表并选择第二个表中不存在的行

    我有两个数据表 我想从第一个数据表中选择第二个数据表中不存在的行 例如 Table A id column 1 data1 2 data2 3 data3 4 data4 Table B id column 1 data10 3 data3
  • STL 绳索 - 何时何地使用

    我想知道在什么情况下你会在另一个STL容器上使用绳子 绳子是一根可伸缩的绳子 实施 它们是为 高效运作涉及 字符串作为一个整体 操作如 赋值 串联和 子字符串花费的时间几乎是 与长度无关 细绳 与 C 弦不同 绳索是 非常合理的代表 长字符
  • 如何使用dynamoose查询本地dynamoDB?

    作为一名开发人员 我不想一直连接到 Amazon Web 服务 我在本地计算机上安装了 DynamoDB 引用了AWS Docs https docs aws amazon com amazondynamodb latest develop
  • 使用 array.filter 进行多级过滤

    我有一个过滤功能 它使用filter快速搜索数组中的文本 filtered filtered filter row gt return Object keys row some key gt return String row key to
  • 将 crontab 文件替换为 -e

    有人知道如何将文件放入 crontab e 吗 我无法使用 crontab 的常规形式为其提供路径 但仍需要替换整个内容 也许将 EDITOR 设置为某些内容 您可以使用以下命令将 cron 作业从文件中获取到 crontab 中 cron
  • 包含 Angular 2+ 日期管道格式的文本

    我正在尝试使用DatePipe在 Angular 2 中 我希望输出日期的格式为 08 23 2017 at 11 07 AM 但是 我无法找出包含文本的正确方法at以我的日期格式 当我这样指定格式时 my date date MM dd
  • CGO_ENABLED 如何影响动态链接和静态链接?

    我们正在编译要在 docker 上运行的 Go 代码 并且正在调查为什么我们的二进制文件没有执行 我们发现它缺少一些动态库 尽管我们想要静态链接的二进制文件 这就是它的编译方式 env GOOS linux CGO ENABLED 1 GO