为什么我无法在 ubuntu 上运行基于 alpine 构建的 C 程序? [复制]

2023-12-10

我在 alpine Linux 容器中编译了一个简单的 hello world C 程序,并将其复制到我的 ubuntu 主机上。令我惊讶的是,我无法在我的 ubuntu 主机上运行二进制文件。相反,当我尝试执行该程序时,出现以下错误。

$ /bin/bash ./hello
$ ./hello: ./hello: cannot execute binary file

为什么我无法在 ubuntu 上运行在 alpine 上编译的程序?

UPDATE我犯了一个错误,试图将 C 程序作为 bash 脚本运行。然而,在纠正我的错误后,我仍然收到错误......

$ ./hello
$ bash: ./hello: No such file or directory

我已经制作了二进制可执行文件,所以这不应该是问题。当运行在主机上编译的相同程序时,不会显示此错误消息。

UPDATE让我澄清几点。

  • 在 ubuntu 容器中构建一个可执行文件,并将其复制到 ubuntu 主机上。该可执行文件有效。
  • 另一个可执行文件是使用 alpine 容器构建的,并复制到 ubuntu 主机上。该可执行文件不起作用。
  • 两个可执行文件都设置了其可执行位。当我运行 ./hello 时,我在相关可执行文件所在的目录中执行此操作。
  • 当我跑步时使用 ubuntu 容器编译的可执行文件上的文件,我得到以下输出。
hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=bc9e3e2ecfc026f8077dca28dbbdee4778862d7a, not stripped
  • 当我跑步时使用 ubuntu 容器编译的可执行文件上的 ldd我得到以下输出。
linux-vdso.so.1 (0x00007ffdbc79e000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f517b5ae000)
/lib64/ld-linux-x86-64.so.2 (0x00007f517bba1000)
  • 当我跑步时使用 alpine 容器编译的可执行文件上的文件,我得到以下输出。
hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-, with debug_info, not stripped
  • 当我跑步时使用 alpine 容器编译的可执行文件上的 ldd,我得到以下输出。
linux-vdso.so.1 (0x00007ffec27f7000)
libc.musl-x86_64.so.1 => not found

Alpine分布用途musl作为标准 C 库实现。

Ubuntu(以及 99% 的其他 Linux)发行版使用glibc作为他们的标准 C 库实现。

他们与自己不相容。我所说的“不兼容”是指在 alpine 下编译的二进制文件与 musl 库链接,而不是与 glibc 链接。

有两种解决方案。您可以在 ubuntu 中安装 musl 库,以便二进制文件可以链接到它。您可以在 alpine 中安装 glibc,并在 alpine 中编译二进制文件,同时将其链接到 glibc。或者您可以针对 musl 静态编译二进制文件。

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

为什么我无法在 ubuntu 上运行基于 alpine 构建的 C 程序? [复制] 的相关文章

  • tcpdump 是否受 iptables 过滤影响?

    如果我的开发机器有iptables规则到FORWARD一些数据包 这些数据包是否被 tcpdump 捕获 我有这个问题 因为我知道存在其他链称为INPUT如果数据包路由到 它会过滤发往应用程序的数据包FORWARD链 它会到达吗tcpdum
  • Ubuntu 上对 exp 的未定义引用(包括 math.h 和与 -lm 的链接)

    我在尝试在 Ubuntu 上编译使用 exp 函数的程序时遇到一些问题 我从 gcc 收到此错误 selied Apolo Dropbox practicas UAM Neuro practica3 make gcc lm o retrop
  • 有没有办法用 gcc 查询直接模块依赖关系?

    给定一个模块 a m cc export module A import B import C import D h 有没有一种调用 gcc 的方法 类似于 M 对标头所做的操作 来列出对其他模块和导入标头 即 B C 和 D h 的直接依
  • GMail 421 4.7.0 稍后重试,关闭连接

    我试图找出为什么它无法使用 GMail 从我的服务器发送邮件 为此 我使用 SwiftMailer 但我可以将问题包含在以下独立代码中
  • Shift 键在我的 emacs 中不起作用

    I run emacs in gnome terminal with nw option it works well except for some key shortcuts that include the shift key For
  • C 语言的符号表

    我目前正在开发一种执行模式匹配的静态分析工具 我在用Flex https github com westes flex生成词法分析器 我编写了代码来管理符号表 我不太有经验C 所以我决定将符号表实现为线性链表 include
  • 如何根据标签将单个 XML 文件拆分为多个

    我有一个带有标签的 XML 文件 我想像这样分割文件
  • 字段的 __attribute__((packed)) 如何影响包含该字段的结构?

    如果我有一个打包字段 为什么我的整个结构会被打包 Example include
  • 使用 MAX_ORDER / 包含 mmzone.h

    根据https www kernel org doc Documentation networking packet mmap txt https www kernel org doc Documentation networking pa
  • 使用包管理器时如何管理 Perl 模块?

    A 最近的问题 https stackoverflow com questions 397817 unable to find perl modules in intrepid ibex ubuntu这让我开始思考 在我尝试过的大多数 Li
  • .net-core:ILDASM / ILASM 的等效项

    net core 是否有相当于 ILDASM ILASM 的功能 具体来说 我正在寻找在 Linux 上运行的东西 因此为什么是 net core ildasm 和 ilasm 工具都是使用此存储库中的 CoreCLR 构建的 https
  • 局部变量在栈中的顺序是怎样的?

    我目前正在尝试对缓冲区溢出漏洞进行一些测试 这是易受攻击的代码 void win printf code flow successfully changed n int main int argc char argv volatile in
  • 如何使用waf构建共享库?

    我想使用构建一个共享库waf http code google com p waf 因为它看起来比 GNU 自动工具更容易 更简洁 到目前为止 我实际上有几个与我开始编写的 wscript 有关的问题 VERSION 0 0 1 APPNA
  • 内核的panic()函数是否完全冻结所有其他进程?

    我想确认内核的panic 功能和其他类似kernel halt and machine halt 一旦触发 保证机器完全冻结 那么 所有的内核和用户进程都被冻结了吗 是panic 可以被调度程序中断吗 中断处理程序仍然可以执行吗 用例 如果
  • 绕过 dev/urandom|random 进行测试

    我想编写一个功能测试用例 用已知的随机数值来测试程序 我已经在单元测试期间用模拟对其进行了测试 但我也希望用于功能测试 当然不是全部 最简单的方法是什么 dev urandom仅覆盖一个进程 有没有办法做类似的事情chroot对于单个文件并
  • docker 构建失败,无法解析“archive.ubuntu.com”

    我无法使用以下 Dockerfile 构建映像 FROM ubuntu RUN apt get y update apt get y install nodejs npm ssh cache npm install when package
  • linux下如何从文本文件中获取值

    我有一些文本格式的文件 xxx conf 我在这个文件中有一些文本 disablelog 1 当我使用 grep r disablelog oscam conf 输出是 disablelog 1 但我只需要值1 请问你有什么想法吗 一种方法
  • 使用 gdb 调试 Linux 内核模块

    我想知道 API 在内核模块 中返回什么 从几种形式可以知道 这并不是那么简单 我们需要加载符号表来调试内核模块 所以我所做的就是 1 尝试找到内核模块的 text bss和 data段地址 2 在 gdb 中使用 add symbol f
  • glibc 堆一致性检查

    根据2008年的帖子 我现在找不到 glibc 堆检查 http www gnu org s libc manual html node Heap Consistency Checking html在多线程环境中不起作用 现在还是2010年
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • VBA 循环遍历用户窗体中的文本框控件

    我已经浏览了许多有关循环用户窗体控件的帖子 但似乎无法调整我找到的代码来满足我的需要 并且需要一些帮助 我想弄清楚的场景 我的用户表单上有 44 个文本框 其名称均以 ch 开头 例如 chTextBox1 当用户窗体激活时 我需要循环所有
  • 数据更改后重新加载 JTable 的 Object[][]

    我想知道是否可以刷新表的 GUIObject 用于最初填充它的内容已更改 Object calculationsTableData public Interface analysisPanel add calculationsTable J
  • 在mysql数据库中存储瑞典语字符

    我在 MySQL 数据库中存储瑞典语字符时遇到问题 我想将它们存储在我的表中users使用 utf8 bin 排序规则 即使我使用 utf8 字符 存储为 我不知道为什么 检索数据并回显给我相同的输出 但带有奇怪的字符而不是 任何帮助表示赞
  • 如何将 Bitmap 对象从一个活动传递到另一个活动

    在我的活动中 我创建了一个Bitmap对象 然后我需要启动另一个对象Activity 我怎样才能通过这个Bitmap来自子活动 即将启动的活动 的对象 Bitmap实施Parcelable 所以你总是可以带着意图传递它 Intent int
  • 如何在 sns clustermap 中标记集群

    我正在使用以下代码创建聚类图 import numpy as np import pandas as pd import seaborn as sns all net names early vis face motion scene sc
  • 使用 xlwt for excel 在 python 中预格式化为货币和两位小数

    我有一个列标题Fee Using xlwt in python 我成功生成了所需的Excel 创建Excel文件时此列始终为空 是否有可能拥有Fee列预格式化为 货币 和 两位小数 这样当我在Fee下载后Excel文件的列 23应该变成 2
  • 非托管资源和 Dispose()

    我正在读一些关于Dispose 方法并发现非托管资源应该显式释放Dispose 方法 或 Finalize 方法 文章称文件句柄和数据库连接对象是非托管资源的示例 谁能解释为什么这些是非托管的以及如果在 Dispose 中处理不当会发生什么
  • 使用 UIActivityViewController 共享视频时,视频未附加到邮件中

    我正在使用下面的代码来共享位于设备上的视频 它非常适合通过消息 facebook 和 iCloud 共享 但不适用于邮件 我可以看到邮件选项在那里 但在邮件草稿中 视频不存在随附的 在代码中 videoAsset is a PHAsset类
  • Delphi 字节逆序

    我一直在尝试编写一个函数 它接受两个指针 一个输入和一个输出 并以相反的顺序将输入中的字节写入输出 到目前为止我还没能让它正常工作 procedure ReverseBytes Source Dest Pointer Size Intege
  • 请求已被阻止;内容必须通过 HTTPS 提供

    我正在后端使用 Spring Security 和 Spring MVC 以及前端使用 Angular 进行应用程序 我的问题是我正确登录 但注销时的问题我在本地主机中正确实现 http localhost 8080工作没有问题 当我将其更
  • Azure Function 在应用程序服务计划中调用自身两次

    我的 azure 函数中有以下代码 手动超时为 10 分钟 using System Net public static async Task
  • 在阻塞 webRequest 处理程序中使用异步调用

    Summary 我正在使用一个browser webRequest onBeforeRequest处理程序 我需要阻止 webRequest 直到从处理程序中调用异步方法返回信息为止 我怎样才能做到这一点 细节 首先 我对这个长问题表示歉意
  • 如何编写一段java代码,让一个实例只发生一次?

    我正在写一个应用程序 在该应用程序中 我有一个实例 我只想在第一次打开应用程序时发生 我想知道如何用 Java 编写一些东西 只让该实例第一次发生 比如注册码之类的 持久存储 创建一个单例 Blackberry 开发论坛有一个出色的单例方法
  • C# 可排序集合,允许重复键

    我正在编写一个程序来设置各种对象在报告中出现的顺序 该序列是 Excel 电子表格上的 Y 位置 单元格 代码的演示部分如下 我想要完成的是拥有一个集合 这将允许我添加多个对象 并且我可以根据顺序获得排序的集合 SortedList lis
  • AJAX 从文件中读取

    我正在使用 AJAX 读取文本文件 如何只读取第一行 此代码应该可以帮助您从远程文本文件中读取 var txtFile new XMLHttpRequest txtFile open GET http my remote url myrem
  • 如何在使用 Ruby on Rails 3 的播种过程中避免验证、回调和“attr_accessible”效应?

    我正在使用 Ruby on Rails 3 并尝试在我的应用程序数据库中播种数据 在 RAILS ROOT models user rb 中 我有 class User lt ActiveRecord Base attr accessibl
  • 在启用 https 的情况下运行 gwt?

    我当前正在运行一个没有安全性的 GWT 站点 但需要切换到 HTTPS 工作的非安全版本使用以下参数运行 port 8888 startupUrl ui index jsp com example EntryPoint 我读过 简单地添加
  • 串口写行文本框错误

    我使用虚拟 COM 端口来测试我的程序 我想用 COM8 进行串行写入 用 COM9 进行串行读取 当想要写入 textbox1 中的值时 我收到此错误 IOException was unhandled The parameter is
  • XslLoadException:禁止解析外部 URI

    我有 xslt 工作表 其中包含另一个 xslt 文件的标签 所有文件编译正确且无错误 但运行以下代码时出现异常 var myXslTrans new XslCompiledTransform XsltSettings sets new X
  • 为什么我无法在 ubuntu 上运行基于 alpine 构建的 C 程序? [复制]

    这个问题在这里已经有答案了 我在 alpine Linux 容器中编译了一个简单的 hello world C 程序 并将其复制到我的 ubuntu 主机上 令我惊讶的是 我无法在我的 ubuntu 主机上运行二进制文件 相反 当我尝试执行