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:带有 JSON 负载的 http.NewRequest POST 返回错误 500

    我正在开发一个 API 库 有一个API端点 POST 当您发出curl命令时 它是 curl H X API TOKEN API TOKEN http interest graph getprismatic com text topic
  • 直接从一个通道发送到另一个通道

    当从一个通道直接发送到另一个通道时 我偶然发现了令人惊讶的行为 package main import fmt func main my chan make chan string chan of chans make chan chan
  • 如何关闭 gorm 1.20.0 中的数据库实例

    由于我没有在 Close 函数中找到 gorm 实例 任何帮助将不胜感激 dbURI fmt Sprintf user s password s dbname s port s sslmode s TimeZone s username p
  • 如何确定 go 中当前运行的可执行文件的完整路径?

    我一直在 osx 上使用这个函数 Shortcut to get the path to the current executable func ExecPath string var here os Args 0 if strings H
  • 如何修复“缺少表的 FROM 子句条目”错误

    我正在尝试根据游戏 ID 获取平台名称 我有如下三个表 我正在尝试加入它们以获得所需的结果 Games Id 1 2 3 4 Game Platforms Id game id platform id 1 1 1 2 1 2 3 3 3
  • 与通道相比,sync.WaitGroup 的优势是什么?

    我正在开发一个并发 Go 库 我偶然发现了 goroutine 之间两种不同的同步模式 其结果相似 等待组 https play golang org p ZYPLlcp16TZ package main import fmt sync t
  • 为什么 gmail API 以纯文本形式发送 html 电子邮件?

    我正在尝试使用 gmail API 发送 html 电子邮件 但由于某些原因 它会随机以纯文本 文本形式发送电子邮件 谷歌似乎改变了我设置的内容类型标头 这有什么理由吗 电子邮件内容始终完全相同 正如我测试的那样 API 仍处于实验阶段吗
  • 是否可以在 C/C++ 中模仿 Go 接口?

    在 Go 中 如果类型具有接口定义的所有方法 则可以将其分配给该接口变量 而无需显式继承它 是否可以在 C C 中模仿此功能 是的 您可以使用纯抽象类 并使用模板类来包装 实现 抽象类的类型 以便它们扩展抽象类 这是一个简单的示例 incl
  • 错误:标准包中非标准导入“gopkg.in/yaml.v2”

    我正在尝试从以下位置导入 go yamlhttps github com go yaml yaml https github com go yaml yaml 并且我发现了一个 Google 没有提供帮助的错误 I ran go get g
  • golang无法启动调试,显示未找到框架CoreFoundation

    我使用的是 Macbook pro m1 在数据迁移或更新到 monterey 后 不确定是什么原因导致的 golang 似乎无法调试或 go list 编译 我尝试重新安装 更新 golang 结果是一样的 Go版本 1 17 3 dar
  • Windows 上 libcurl 的静态库[重复]

    这个问题在这里已经有答案了 如何将此库 libcurl 静态链接到 exe 我努力了 disable share enable static 没有帮助 我使用的是MingW32 有没有一种简单的方法来静态链接这个库 这样我的应用程序就不再有
  • Golang 结构体初始化

    有一个像这样的简单结构 type Event struct Id int Name string 这两种初始化方法有什么区别呢 e1 Event Id 1 Name event 1 e2 Event Id 2 Name event 2 为什
  • GNU ld 是否有一个选项可以完全省略 -dynamic-linker (PT_INTERP)?

    我正在 Linux 上试验纯静态链接 PIE 可执行文件的概念 但遇到了以下问题 GNU binutils 链接器坚持在输出二进制文件中添加 PT INTERP 标头 pie被使用 即使也给出 static 有什么办法可以抑制这种行为吗 也
  • 将产生 goroutine 的 golang 方法

    据我所知 如果 goroutine 太忙 它们会阻止其他 goroutine 运行 对我来说 这意味着我的应用程序的性能和响应能力可能取决于我知道哪些库方法将控制其他 goroutine 例如通常是 Read 和 Write 有什么方法可以
  • 为什么独立的 C hello 程序在用作动态链接器时会崩溃

    以下程序 include
  • 静态和动态链接同一个库

    我有一个静态链接到库的程序 libA 2 0 a 并且还动态链接到另一个库 libB so libB so还动态链接到旧版本的 libA libA 1 0 so 这个配置可以吗 如果是这样 系统如何知道使用来自libA 2 0 a对于我的程
  • 库和可执行文件的大小

    我有一个在 Windows 上使用 MSVC 创建的静态库 lib 库的大小为 70KB 然后我有一个链接该库的应用程序 但现在最终可执行文件 exe 的大小为 29KB 小于库 我想知道的是 由于该库是静态链接的 我认为它应该直接添加到可
  • 子字符串和 Go 垃圾收集器

    在 Go 中获取字符串的子字符串时 不会分配新的内存 相反 子字符串的底层表示包含一个数据指针 该指针是原始字符串的数据指针的偏移量 这意味着 如果我有一个大字符串并希望跟踪一个小子字符串 则垃圾收集器将无法释放任何大字符串 直到我释放对较
  • 重新设计循环依赖缺陷

    我有一堆小服务 它们共享一些常见的包 例如Logger Configuration and Net 我在单独的项目中编写了每个包 问题是我的Logger需求包Configuration用于设置 和我的Configuration not仅由L
  • 仅导出嵌入结构实现的方法子集

    是否可以仅导出嵌入结构实现的方法的子集 这是一种与减少代码复制和粘贴非常不同的方法吗 还有更惯用的方法吗 type A struct func a A Hello fmt Println Hello func a A World fmt P

随机推荐

  • 使用 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