Страница 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 библиотек, хотя очевидно что всего библиотек больше. Откуда же берутся объектные файлы у других библиотек?