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

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

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

Сообщение ya_vanka » 31.07.2015 13:18:15

Добрый день.

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

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

Вот думаю может сделать статическую сборку? На компьютере, где я компилирую проект проблем с версиями нет.
ya_vanka
новенький
 
Сообщения: 89
Зарегистрирован: 07.08.2013 14:28:41

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

Сообщение Sergei I. Gorelkin » 31.07.2015 18:26:37

Статическая сборка включается ключом -Xt в командной строке.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

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

Сообщение ya_vanka » 31.07.2015 23:36:27

А в Lazarus нет такой настройки в параметрах проекта?
ya_vanka
новенький
 
Сообщения: 89
Зарегистрирован: 07.08.2013 14:28:41

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

Сообщение Лекс Айрин » 01.08.2015 13:18:25

ya_vanka, если даже и нет, то всегда можно добавить вручную в разделе параметров компилятора. Вот только подлинкует ли указанную библиотеку сборщик? ведь so это же аналог dll для линукса. Может, просто разместить копию библиотеки в нестандартном месте...
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

Сообщение ya_vanka » 01.08.2015 22:18:16

А где подробно почитать про опции компилятора с примерами?

Я нашел только http://lazarus-ccr.sourceforge.net/fpcd ... 450005.1.4
Но там просто одна строчка по опции, далеко не все понятно как работает.
ya_vanka
новенький
 
Сообщения: 89
Зарегистрирован: 07.08.2013 14:28:41

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

Сообщение ya_vanka » 03.08.2015 19:14:45

Включил статическую сборку. Получил ошибки при линковке:

Код: Выделить всё
/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 все собирается без проблем.
Подскажите что делать с этими ошибками.
ya_vanka
новенький
 
Сообщения: 89
Зарегистрирован: 07.08.2013 14:28:41

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

Сообщение Лекс Айрин » 03.08.2015 20:38:15

ya_vanka, забить на ключ -Xt
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

Сообщение ya_vanka » 04.08.2015 00:58:34

Да я бы с радостью, но тогда остается проблема из первого сообщения.
ya_vanka
новенький
 
Сообщения: 89
Зарегистрирован: 07.08.2013 14:28:41

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

Сообщение Vadim » 04.08.2015 04:16:07

ya_vanka писал(а):/usr/bin/ld: cannot find -lgdk_pixbuf-2.0

А как на счёт проверить справедливость этого сообщения?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение Лекс Айрин » 04.08.2015 09:25:51

ya_vanka, всего шампанского не перепить, всех денег не заработать...

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

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

Вообще-то компиляция сама по себе проходит...
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

Сообщение ya_vanka » 04.08.2015 13:13:12

Лекс Айрин писал(а):Попробуйте снизить минимальную версию библиотеки...


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


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


Я правильно понимаю, что он не находит статическую библиотеку gdk_pixbuf-2.0.a?
ya_vanka
новенький
 
Сообщения: 89
Зарегистрирован: 07.08.2013 14:28:41

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

Сообщение Лекс Айрин » 04.08.2015 13:18:56

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


скорее, gdk_pixbuf-2.0.o -- объектный файл, которые позволяет присоединить библиотеку к исполняемому файлу.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

Сообщение ya_vanka » 04.08.2015 16:07:25

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


А он должен идти в dev пакете? Или где?
ya_vanka
новенький
 
Сообщения: 89
Зарегистрирован: 07.08.2013 14:28:41

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

Сообщение Лекс Айрин » 04.08.2015 16:25:01

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

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

Сообщение ya_vanka » 05.08.2015 16:25:21

Линковщик не находит объектные файлы 3 библиотек, хотя очевидно что всего библиотек больше. Откуда же берутся объектные файлы у других библиотек?
ya_vanka
новенький
 
Сообщения: 89
Зарегистрирован: 07.08.2013 14:28:41

След.

Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru