gpt4 book ai didi

linux - 无法在 Gentoo 上静态链接 glib

转载 作者:太空宇宙 更新时间:2023-11-04 04:26:02 24 4
gpt4 key购买 nike

是否有任何发行版提供静态链接的 glib 库?我需要将我的应用程序发送到基于 glibc-2.7 的系统,这导致针对 glibc-2.1X 构建的所有内容都无法运行,iostream 问题。所以我必须静态链接所有内容。

libxcb 和 glib 都因缺少符号而失败:

/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../../lib/libglib-2.0.a(gmem.o):(.note.stapsdt+0x1c): undefined reference to `glib_mem__alloc_semaphore'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../../lib/libglib-2.0.a(gmem.o):(.note.stapsdt+0x68): undefined reference to `glib_mem__alloc_semaphore'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../../lib/libglib-2.0.a(gmem.o):(.note.stapsdt+0xb0): undefined reference to `glib_mem__alloc_semaphore'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../../lib/libglib-2.0.a(gmem.o):(.note.stapsdt+0xfc): undefined reference to `glib_mem__alloc_semaphore'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../../lib/libglib-2.0.a(gmem.o):(.note.stapsdt+0x144): undefined reference to `glib_mem__realloc_semaphore'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../../lib/libglib-2.0.a(gmem.o):(.note.stapsdt+0x194): undefined reference to `glib_mem__realloc_semaphore'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../../lib/libglib-2.0.a(gmem.o):(.note.stapsdt+0x1e0): undefined reference to `glib_mem__free_semaphore'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../../lib/libglib-2.0.a(gmem.o):(.note.stapsdt+0x218): undefined reference to `glib_mem__alloc_semaphore'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../../lib/libglib-2.0.a(gmem.o):(.note.stapsdt+0x264): undefined reference to `glib_mem__realloc_semaphore'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../../lib/libglib-2.0.a(gslice.o):(.note.stapsdt+0x1c): undefined reference to `glib_slice__alloc_semaphore'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../../lib/libglib-2.0.a(gslice.o):(.note.stapsdt+0x60): undefined reference to `glib_slice__free_semaphore'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../../lib/libglib-2.0.a(gdataset.o):(.note.stapsdt+0x1c): undefined reference to `glib_quark__new_semaphore'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../../lib/libglib-2.0.a(gdataset.o):(.note.stapsdt+0x5c): undefined reference to `glib_quark__new_semaphore'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../../lib/libglib-2.0.a(gdataset.o):(.note.stapsdt+0x9c): undefined reference to `glib_quark__new_semaphore'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../../lib/libglib-2.0.a(gdataset.o):(.note.stapsdt+0xdc): undefined reference to `glib_quark__new_semaphore'
collect2: ld returned 1 exit status
make: *** [StreetBasketBall] Error 1

很多人都遇到了上面同样的问题,我用谷歌搜索并发现了一个错误报告,它坚持将 -lrt 添加到 ld ,但遗憾的是,我检查了 pkg-config 的输出,它已经包含了。

我该如何解决这个问题?或者还有其他可供我使用的发行版吗?

谢谢!

P.S: USE="-static-libs"在 make.conf 中启用

最佳答案

GTK 及其 Glib已根据 LGPL 获得许可许可证。

LGPL 许可证要求任何组合工作(即链接 Glib 的程序)应“不限制对库部分的修改”,并明确建议“使用合适的共享库机制”来实现该目标。其目的是,与 Glib 链接的软件的任何用户都应该能够轻松改进 Glib(例如更新它),并能够使用与改进的 Glib 链接的软件。

实际上,Glib 需要是一个共享库,如果您分发与 Glib 变体静态链接的二进制文件,您应该提供 Glib 的源代码和足够的文件,以便用户能够重新链接新的 Glib(即应用程序的所有目标文件)。

所以你不太可能找到 Glib 的静态链接版本,因为它有点“非法”(并且违背了 LGPL 和 FSF 的目标)。

发行版当然不会通过提供静态 Glib 库来促进违反 LGPL 许可证。

警告:我不是律师

PS。要解决您的问题,您可以尝试仅静态链接 libc (但这可能行不通,因为 Glib 使用 libdl 进行 dlopen ,需要动态链接)。

您可以将您的软件设为自由软件(例如 GPL 许可)并分发其源代码(将构建和打包的负担留给用户或分发制造商)。

如果您坚持要发布二进制文件,请制作它们的几种变体:一种用于旧系统(带有 libc <= 2.7),另一种用于较新系统。

关于linux - 无法在 Gentoo 上静态链接 glib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8891191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com