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



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

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

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

在这次失败之后,我运行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__pthread_unregister_cancel没有找到。。。

有人有办法解决这个问题吗?

AlpineLinux使用MUSL而不是GLIBC。MUSL更轻,不会拖住遗留的东西。当应用程序依赖遗留的东西时,比如当他们想使用pthread时,这是一个问题。

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

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

其中一个选项是使用社区贡献的gcompat包。APK包、说明和其他详细信息在pkgs页面上

https://pkgs.alpinelinux.org/packages?name=gcompat&branch=edge&repo=社区&arch=x86_64

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

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

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

我发现的是Sasha Gerrand的APK和Docker镜像,他为AlpineLinux创建了一个完整的GLIBC 2.34库。如果你安装了APK软件包或使用Docker镜像,你应该有一个完整的glibc在AlpineLinux上运行。

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

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

相关内容

  • 没有找到相关文章

最新更新