Страница 1 из 2

Статическая сборка

СообщениеДобавлено: 31.07.2015 13:18:15
ya_vanka
Добрый день.

Можно ли (под Linux) скомпилировать проект так, чтобы он не требовал внешних библиотек, а включил весь исполняемый код в исполняемый файл?

У меня проблема с переносом приложения на другой компьютер (на котором стоит GLIBC_2.13).
При запуске выдается сообщение: /lib32/libc.so.6: version `GLIBC_2.15' not found (required by /usr/lib/libglib-2.0.so.0).

Вот думаю может сделать статическую сборку? На компьютере, где я компилирую проект проблем с версиями нет.

Re: Статическая сборка

СообщениеДобавлено: 31.07.2015 18:26:37
Sergei I. Gorelkin
Статическая сборка включается ключом -Xt в командной строке.

Re: Статическая сборка

СообщениеДобавлено: 31.07.2015 23:36:27
ya_vanka
А в Lazarus нет такой настройки в параметрах проекта?

Re: Статическая сборка

СообщениеДобавлено: 01.08.2015 13:18:25
Лекс Айрин
ya_vanka, если даже и нет, то всегда можно добавить вручную в разделе параметров компилятора. Вот только подлинкует ли указанную библиотеку сборщик? ведь so это же аналог dll для линукса. Может, просто разместить копию библиотеки в нестандартном месте...

Re: Статическая сборка

СообщениеДобавлено: 01.08.2015 22:18:16
ya_vanka
А где подробно почитать про опции компилятора с примерами?

Я нашел только http://lazarus-ccr.sourceforge.net/fpcd ... 450005.1.4
Но там просто одна строчка по опции, далеко не все понятно как работает.

Re: Статическая сборка

СообщениеДобавлено: 03.08.2015 19:14:45
ya_vanka
Включил статическую сборку. Получил ошибки при линковке:

Код: Выделить всё
/usr/lib/fpc/2.6.4/units/i386-linux/rtl/cthreads.o: In function `CTHREADS_LOADPTHREADS$$BOOLEAN':
cthreads.pp:(.text+0x12): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: cannot find -lgdk_pixbuf-2.0
/usr/lib/i386-linux-gnu/libgtk-x11-2.0.a(gtkmain.o):(.bss+0x0): multiple definition of `gtk_debug_flags'
/usr/lib/fpc/2.6.4/units/i386-linux/gtk2/gtk2.o:(.bss+0x0): first defined here
/usr/bin/ld: cannot find -latk-1.0
/usr/bin/ld: cannot find -lglfw
/usr/lib/i386-linux-gnu/libgtk-x11-2.0.a(gtkfilesel.o): In function `attempt_homedir_completion':
(.text+0x135f): warning: Using 'getpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/i386-linux-gnu/libgtk-x11-2.0.a(gtkfilesel.o): In function `open_user_dir':
(.text+0x1095): warning: Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/i386-linux-gnu/libglib-2.0.a(libglib_2_0_la-gutils.o): In function `g_get_user_database_entry':
(.text+0x252): warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/i386-linux-gnu/libgtk-x11-2.0.a(gtkfilesel.o): In function `attempt_homedir_completion':
(.text+0x12e4): warning: Using 'setpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/i386-linux-gnu/libgtk-x11-2.0.a(gtkfilesel.o): In function `attempt_homedir_completion':
(.text+0x14ac): warning: Using 'endpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/i386-linux-gnu/libglib-2.0.a(libglib_2_0_la-gutils.o): In function `g_get_user_database_entry':
(.text+0xc4): warning: Using 'getpwnam_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/i386-linux-gnu/libglib-2.0.a(libglib_2_0_la-gutils.o): In function `g_get_user_database_entry':
(.text+0x101): warning: Using 'getpwuid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/i386-linux-gnu/libX11.a(xim_trans.o): In function `_XimXTransSocketINETConnect':
(.text+0xe6c): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/media/ivan/Vanka_SSD1/projects/AA/Dirigl.lpr(105,1) Error: (9013) Error while linking
/media/ivan/Vanka_SSD1/projects/AA/Dirigl.lpr(105,1) Fatal: (10026) There were 1 errors compiling module, stopping
Fatal: (1018) Compilation aborted
Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)


Хотя без -Xt все собирается без проблем.
Подскажите что делать с этими ошибками.

Re: Статическая сборка

СообщениеДобавлено: 03.08.2015 20:38:15
Лекс Айрин
ya_vanka, забить на ключ -Xt

Re: Статическая сборка

СообщениеДобавлено: 04.08.2015 00:58:34
ya_vanka
Да я бы с радостью, но тогда остается проблема из первого сообщения.

Re: Статическая сборка

СообщениеДобавлено: 04.08.2015 04:16:07
Vadim
ya_vanka писал(а):/usr/bin/ld: cannot find -lgdk_pixbuf-2.0

А как на счёт проверить справедливость этого сообщения?

Re: Статическая сборка

СообщениеДобавлено: 04.08.2015 09:25:51
Лекс Айрин
ya_vanka, всего шампанского не перепить, всех денег не заработать...

Попробуйте снизить минимальную версию библиотеки... переписать не предлагаю. Или выберете другой способ достичь необходимого результата.

Vadim писал(а):А как на счёт проверить справедливость этого сообщения?

Вообще-то компиляция сама по себе проходит...

Re: Статическая сборка

СообщениеДобавлено: 04.08.2015 13:13:12
ya_vanka
Лекс Айрин писал(а):Попробуйте снизить минимальную версию библиотеки...


Да я бы с радостью, только как? Не мой код выставляет требование к версии.


Код: Выделить всё
/usr/bin/ld: cannot find -lgdk_pixbuf-2.0


Я правильно понимаю, что он не находит статическую библиотеку gdk_pixbuf-2.0.a?

Re: Статическая сборка

СообщениеДобавлено: 04.08.2015 13:18:56
Лекс Айрин
ya_vanka писал(а):Я правильно понимаю, что он не находит статическую библиотеку gdk_pixbuf-2.0.a?


скорее, gdk_pixbuf-2.0.o -- объектный файл, которые позволяет присоединить библиотеку к исполняемому файлу.

Re: Статическая сборка

СообщениеДобавлено: 04.08.2015 16:07:25
ya_vanka
Лекс Айрин писал(а):скорее, gdk_pixbuf-2.0.o -- объектный файл, которые позволяет присоединить библиотеку к исполняемому файлу.


А он должен идти в dev пакете? Или где?

Re: Статическая сборка

СообщениеДобавлено: 04.08.2015 16:25:01
Лекс Айрин
ya_vanka, нет, не должен. Этот файл создается компилятором из исходников. И естественно, что у вас его нет. Ну не позволяют пока технологии прилинковать внешнюю библиотеку динамической линковки к абсолютно любой программе. Одно дело как ресурс, а потом вытащить наружу, но Вам то надо немного другое.
Самое смешное, что теоретически это возможно -- практически слишком много проблем.

Re: Статическая сборка

СообщениеДобавлено: 05.08.2015 16:25:21
ya_vanka
Линковщик не находит объектные файлы 3 библиотек, хотя очевидно что всего библиотек больше. Откуда же берутся объектные файлы у других библиотек?