Невозможно статически связать glib в Gentoo - PullRequest
0 голосов
/ 17 января 2012

Существует ли какой-либо дистрибутив, который предоставляет статически связанные библиотеки 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, он уже содержит это.

Как я могу решить эту проблему?Или есть другой доступный для меня дистрибутив?

Спасибо!

PS: USE = "- static-libs" включен в make.conf

1 Ответ

0 голосов
/ 17 января 2012

GTK и его Glib лицензируются по лицензии LGPL .

Лицензия LGPL требует, чтобы любая объединенная работа (т. Е. Программа, связывающая Glib) не "не ограничивала изменение частей библиотеки" и явно предлагала "Использовать подходящую общую библиотеку механизм " для этой цели. Намерение состоит в том, чтобы любой пользователь программного обеспечения, связанного с Glib, мог легко улучшить Glib (например, обновить его) и использовать программное обеспечение, связанное с улучшенным Glib.

В практическом плане сортировка Glib должна быть общей библиотекой, и если вы распространяете двоичный файл, статически связанный с вариантом Glib, вы должны предоставить источник вашего Glib и достаточное количество файлов, чтобы пользователь мог восстановить связь с новым Glib (т. е. всеми объектными файлами вашего приложения).

Таким образом, вы вряд ли найдете статически связанную версию Glib, потому что она в некотором роде «нелегальна» (и противоречит цели LGPL и FSF).

Дистрибутив определенно не будет способствовать нарушению лицензии LGPL, предоставляя статические библиотеки Glib.

Предостережение: Я не юрист

PS. Чтобы решить вашу проблему, вы можете попытаться статически связать только libc (но, вероятно, это не сработает, потому что Glib использует libdl для dlopen, который должен быть динамически связан).

Вы можете сделать свое программное обеспечение бесплатным (например, лицензированным по лицензии GPL) и распространять его исходный код (оставляя бремя его сборки и упаковки для пользователей или распространителей).

Если вы настаиваете на доставке двоичных файлов, сделайте несколько их вариантов: один для старых систем (с libc <= 2.7) и один для более новых систем. </p>

...