在 AlpineLinux 上使用使用 glibc 的共享库

2024-05-20

我正在开发 AlpineLinux(安装在我的计算机上,而不是安装在 docker 中),并且我正在尝试使用依赖于 glibc 的共享库。

由于 Glibc 没有集成到这个发行版中,我看到了一个替代方案,gcompat,旨在提供与为 Glibc 构建的程序的兼容性。

我想使用的库是 IDS Imaging 的驱动程序(用于他们的相机)。 动态加载时.so with CDLL(来自 python 脚本),它失败了。

这次失败后,我跑了ldd libueye_api.so检查是否找到所有依赖项,我得到:

/lib/ld-musl-x86_64.so.1 (0x7fb685c50000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x7fb684d93000)
    librt.so.1 => /lib/ld-musl-x86_64.so.1 (0x7fb685c50000)
    libdl.so.2 => /lib/ld-musl-x86_64.so.1 (0x7fb685c50000)
    libpthread.so.0 => /lib/ld-musl-x86_64.so.1 (0x7fb685c50000)
    libgomp.so.1 => /usr/lib/libgomp.so.1 (0x7fb684d51000)
    libm.so.6 => /lib/ld-musl-x86_64.so.1 (0x7fb685c50000)
    libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x7fb684d38000)
    libc.so.6 => /lib/ld-musl-x86_64.so.1 (0x7fb685c50000)
    ld-linux-x86-64.so.2 => /lib/ld-linux-x86-64.so.2 (0x7fb684d32000)
Error relocating libueye_api.so: __pthread_register_cancel: symbol not found
Error relocating libueye_api.so: __pthread_unregister_cancel: symbol not found

在此日志中,我看到 musl 和 gcompat 已成功找到,但是__pthread_register_cancel and __pthread_unregister_cancel没有找到...

有人有解决这个问题的想法吗?


AlpineLinux 使用 MUSL 而不是 GLIBC。 MUSL 更轻,并且不会拖累遗产。当应用程序依赖于遗留系统时(例如当它们想要使用 pthread 时),这是一个问题。

AlpineLinux 有一个 wiki,描述了运行需要 GLIBC 的应用程序的 4 种替代方案。

https://wiki.alpinelinux.org/wiki/Running_glibc_programs https://wiki.alpinelinux.org/wiki/Running_glibc_programs

其中一种选择是使用社区贡献的 gcompat 包。 APK 包、描述和其他详细信息位于 pkgs 页面上

在 APKBUILD 文件中,它显示了源代码的来源,并且 compat 库中的 pthread 没有 __pthread_register_cancel。在您的堆栈跟踪中,我没有看到任何对 /lib/libgcompat.so.0 的引用,因此也许仍然需要通过运行 ldconfig 来找到该库,但我认为 gcompat 不包含所有 pthread 方法。它只是不在代码中

https://git.adelielinux.org/adelie/gcompat/-/blob/current/libgcompat/pthread.c https://git.adelielinux.org/adelie/gcompat/-/blob/current/libgcompat/pthread.c

我依稀记得我曾经在 AlpineLinux 中安装过 GLIBC 软件包,但这可能只是我的疯狂梦想之一,我在存储库中找不到这样的软件包

我找到的是 Sasha Gerrand 提供的 APK 和 Docker 镜像,她为 AlpineLinux 创建了完整的 GLIBC 2.34 库。如果您安装APK包或使用Docker镜像,您应该在AlpineLinux上运行完整的glibc。

https://github.com/sgerrand/alpine-pkg-glibc https://github.com/sgerrand/alpine-pkg-glibc

就我个人而言,我会尽量避免运行依赖于库的应用程序,但我知道有时并不是切换到更灵活的应用程序的选择。

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

在 AlpineLinux 上使用使用 glibc 的共享库 的相关文章

随机推荐

  • 重命名 python 子包,将旧名称标记为已弃用

    我有一个 python 包 它具有以下目录结构 package init py subpackage A init py moduleA py moduleB py 现在我想更改名称subpackage A to subpackage B同
  • 使用 React.forwardRef 与自定义 ref prop 的价值

    我看到React forwardRef从反应文档来看 似乎是将引用传递给子功能组件的认可方式 const FancyButton React forwardRef props ref gt
  • 我在这个 log4net 实现中做错了什么?

    与许多其他人一样 我正在尝试将 Log4net 实现到我的 C net 应用程序中 但我无法让它为我工作 我已经做了很多搜索 包括在这个网站上 并尝试了许多不同的解决方案 但还没有任何对我有用的解决方案 所以简单的问题是 我做错了什么 As
  • Javascript 播放声音性能重吗?

    我正在用 Javascript 制作一个简单的游戏 当一个物体与墙壁碰撞时 它会发出 砰 的声音 声音的响度取决于物体的速度 速度越高 gt 声音越大 播放功能 playSound function id vol ID of the sou
  • 如何批量获取子字符串在字符串中的位置

    获取子串的位置 Set str1 This is Test string Set sstr Test 这里我需要获取 Test 8 的位置 谢谢 echo OFF SETLOCAL Set str1 This is Test string
  • 在回调中使用await(Microsoft Bot Framework v4 Nodejs)

    我正在尝试将回复发送回chatbot emulator从内部回调 async getUserDetails step console log inside get userdetaiuls modeiule this userDBObjec
  • 如何在 R 中的 dygraph 标题中使用 UTF-8 字符

    使用 Rstudio Windows8 当我使用 dygraph 函数绘制时间序列时 在尝试在主标题中使用 UTF 8 字符时遇到问题 library dygraphs dygraph AirPassengers main T tulo 这
  • Ajax 没有将我重定向到下一页

    我正在尝试将单击的图像的 ID 传递到下一页 当我开发代码时 它没有将我重定向到下一页 当我单击 F12 并检查网络中的 POST 时 它显示变量已正确传递到下一页 如附图所示 但它没有将我重定向到下一页 所以现在我知道变量在下一页中正确传
  • Linq to 实体使用 `Func` 在生成匿名对象的 select 语句中创建属性

    我正在使用 linq to 实体开发一种简单的文本搜索方法 我想在几个地方重用该方法 看起来有点像这样 IQueryable
  • MFC 中位图背景绘制的线程类型

    我有一个 MFC 文档 视图 C 图形应用程序 它将所有绘图都绘制到离屏位图 然后将其复制到 OnDraw 方法中提供的 CDC 指针 在过去的几天里 我一直在寻找将绘图组件放置在单独的工作线程中 这样它就不会停止 GUI 当我执行此操作时
  • 调用异步方法时什么情况下使用.Wait()

    我有以下内容async我的 asp net mvc 5 Web 应用程序中长时间运行的方法 public async Task
  • 使用 awk 读取文件并搜索另一个文件

    我正在读取一个文件 每行都有数字 我需要搜索另一个满足这些数字和其他条件的文件 我正在尝试使用 awk 来做到这一点 但遇到了问题 File a txt 1476 1477 1497 现在我需要打印第 12 列包含这些数字的行以及第 3 列
  • django post_save 信号和 ManyToManyField (和 Django Admin)

    我的 post save 函数有问题 该函数已正确触发 但实例不包含插入的值 我用ipdb检查了该功能 没有任何问题 只是 ManyToManyField 是空的 代码 receiver post save sender Supplier
  • 处理大数据二进制文件

    我正在处理包含原始数据的大型二进制文件 每个大约 2 GB 这些文件具有明确定义的结构 其中每个文件都是一个数组events 每个事件都是一个数组data banks Each event and data bank有一个结构 header
  • 如何在Vue.js中格式化当前日期格式

    我需要获取当前日期Vue js 为此 我使用了以下方法 today date new Date toJSON slice 0 10 replace g today date将给出日期2019 09 11格式 有什么方法可以自定义这种格式吗
  • 如何从 C++ 中的文件中读取双精度值

    如何从 C 中的文件中读取 double 值 对于整数 我知道您可以使用 getline 然后使用 atoi 但我没有找到双倍函数的数组 什么可用于读取双精度数或将 char 数组转换为双精度数 您可以使用流提取 std ifstream
  • 从 UNIX 命令行向串行端口发送字节?

    我想使用命令行将字节流发送到串行端口 这可能吗 我的串口位于 dev cu usbserial A700dYoR在我的 Mac 上 例如 如果我想将整数 50 或字符串 data 发送到该串行端口 我该怎么做 我对 UNIX 的了解非常有限
  • 如何在 Windows 上的 Eclipse 中设置 Clang 工具链?

    我为一个愚蠢的问题道歉 但我在网上找不到答案 我正在努力为 64 位计算机上的 Windows 7 中的 Eclipse 设置 Clang 编译器 链接器 我对 C 的了解非常过时 并且从未在 Eclipse 中工作过 我想要实现的是在 W
  • C语言中如何通过内存地址映射函数名和行号?

    如何用 GCC 中的内存地址映射回函数名称和行号 即假设一个 C 语言原型 void func Get the address of caller maybe this could be avoided MemoryAddress get
  • 在 AlpineLinux 上使用使用 glibc 的共享库

    我正在开发 AlpineLinux 安装在我的计算机上 而不是安装在 docker 中 并且我正在尝试使用依赖于 glibc 的共享库 由于 Glibc 没有集成到这个发行版中 我看到了一个替代方案 gcompat 旨在提供与为 Glibc