无法在Gentoo上静态链接glib

时间:2012-01-17 07:46:25

标签: linux static-libraries glibc glib

是否有任何分发提供静态链接的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

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

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

谢谢!

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

分发肯定不会通过提供静态Glib库来促进违反LGPL许可证。

警告:我不是律师

PS。要解决您的问题,您可能会尝试仅静态链接libc(但它可能不起作用,因为Glib使用libdl进行dlopen哪种类型需要动态链接)。

您可以将您的软件设为免费软件(例如GPL许可)并分发其源代码(留下构建它的负担并将其打包给用户或分发商)。

如果您坚持发送二进制文件,请为它们制作一些变体:一个用于旧系统(libc <= 2.7),另一个用于较新系统。