Сборка 32-битного приложения на 64-битной системе (Debian7)

Модератор: Модераторы разделов

IMB
Сообщения: 2516
ОС: Debian

Сборка 32-битного приложения на 64-битной системе

Сообщение IMB »

Доброго дня!
Рабочая система - 64-биный Debian GNU/Linux 7.6, необходимо собрать 32-битное приложение использующее libssl.

Код: Выделить всё

$ dpkg -l | grep libssl
ii  libssl-dev                            1.0.1e-2+deb7u11                   amd64        SSL development libraries, header files and documentation
ii  libssl1.0.0:amd64                     1.0.1e-2+deb7u11                   amd64        SSL shared libraries
ii  libssl1.0.0:i386                      1.0.1e-2+deb7u11                   i386         SSL shared libraries

$ ls -l /usr/lib/i386-linux-gnu/lib*
-rw-r--r-- 1 root root 1816200 Jun 15 16:12 /usr/lib/i386-linux-gnu/libcrypto.so.1.0.0
-rw-r--r-- 1 root root  358880 Jun 15 16:12 /usr/lib/i386-linux-gnu/libssl.so.1.0.0

$ ls -l /usr/lib/x86_64-linux-gnu/libcrypto*
-rw-r--r-- 1 root root 4151458 Jun 15 15:36 /usr/lib/x86_64-linux-gnu/libcrypto.a
lrwxrwxrwx 1 root root      18 Jun 15 15:36 /usr/lib/x86_64-linux-gnu/libcrypto.so -> libcrypto.so.1.0.0
-rw-r--r-- 1 root root 2048480 Jun 15 15:36 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0

Компилятору при сборке устанавливается флаг -m32, но линковщик не может найти библиотеку при указании с помощью -lcrypto, решил проблему указанием полного пути до библиотеки.
В предыдущем релизе, Debian 6, с устанавленым пакетом ia32-lib было достаточно установить флаг -m32 и указать ликоваться с библиотекой через -lcrypto.
Вопрос - как по другому можно решить этот вопрос, так как я не могу гарантировать, что сборка приложения будет всегда производится в Debian 7.
Спасибо.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18978
Статус: ✡ иностранный агент
ОС: Debian GNU/Linux

Re: Сборка 32-битного приложения на 64-битной системе

Сообщение Bizdelnick »

man ld

Код: Выделить всё

       -L searchdir
       --library-path=searchdir
           Add path searchdir to the list of paths that ld will search for
           archive libraries and ld control scripts.  You may use this
           option any number of times.  The directories are searched in the
           order in which they are specified on the command line.
           Directories specified on the command line are searched before
           the default directories.  All -L options apply to all -l
           options, regardless of the order in which the options appear.
           -L options do not affect how ld searches for a linker script
           unless -T option is specified.

           If searchdir begins with "=", then the "=" will be replaced by
           the sysroot prefix, a path specified when the linker is
           configured.

           The default set of paths searched (without being specified with
           -L) depends on which emulation mode ld is using, and in some
           cases also on how it was configured.

           The paths can also be specified in a link script with the
           "SEARCH_DIR" command.  Directories specified this way are
           searched at the point in which the linker script appears in the
           command line.


[offtop]А в чём смысл собирать x86-программу для использования в x86_64-системе?[offtop]
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Сборка 32-битного приложения на 64-битной системе

Сообщение NickLion »

Добавить пути в командную строку -L или в переменную окружения $LIBRARY_PATH

Bizdelnick
оффтоп, например, для линковки с проприетарной 32-битной библиотекой. Или для другого компа, где x86 стоит.
Спасибо сказали:

IMB
Сообщения: 2516
ОС: Debian

Re: Сборка 32-битного приложения на 64-битной системе

Сообщение IMB »

Решение с ключём -L извесно, но оно не нравится именно указанием этого пути, так как если сборку будут проводить в ином дистрибьютиве, например Fedora, то там путь может отличаться.
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Сборка 32-битного приложения на 64-битной системе

Сообщение NickLion »

Для этого и используются всякие configure, make. Ну, или требуйте, чтобы на системе была подготовлена переменная $LIBRARY_PATH. Проверьте, может, из pkg-config вытащить эти пути получится.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18978
Статус: ✡ иностранный агент
ОС: Debian GNU/Linux

Re: Сборка 32-битного приложения на 64-битной системе

Сообщение Bizdelnick »

cmake или autotools в помощь. А для передачи им дистрибутивоспецифичных опций типа путей делаются пакеты. Но тогда уж и сборку логично производить в родном окружении.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

IMB
Сообщения: 2516
ОС: Debian

Re: Сборка 32-битного приложения на 64-битной системе

Сообщение IMB »

Всё это замечательно, но я то пытаюсь линковаться с системной библиотекой.
Думается мне это из-за появившейся в Debian multi-arch и параметрах сборки gcc

Код: Выделить всё

$ gcc --version
gcc (Debian 4.7.2-5) 4.7.2
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ gcc -print-search-dirs
install: /usr/lib/gcc/x86_64-linux-gnu/4.7/
programs: =/usr/lib/gcc/x86_64-linux-gnu/4.7/:/usr/lib/gcc/x86_64-linux-gnu/4.7/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.7/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/bin/x86_64-linux-gnu/4.7/:/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/bin/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/bin/
libraries: =/usr/lib/gcc/x86_64-linux-gnu/4.7/:/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/lib/x86_64-linux-gnu/4.7/:/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/lib/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/4.7/:/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib/:/lib/x86_64-linux-gnu/4.7/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/4.7/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/lib/:/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../:/lib/:/usr/lib/

К сожалению /usr/lib/i386-linux-gnu в этот список не входит.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18978
Статус: ✡ иностранный агент
ОС: Debian GNU/Linux

Re: Сборка 32-битного приложения на 64-битной системе

Сообщение Bizdelnick »

IMB писал(а):
05.08.2014 13:38
Всё это замечательно, но я то пытаюсь линковаться с системной библиотекой.

Я это понял. Какая разница?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Сборка 32-битного приложения на 64-битной системе

Сообщение drBatty »

IMB писал(а):
05.08.2014 12:18
Решение с ключём -L извесно, но оно не нравится именно указанием этого пути, так как если сборку будут проводить в ином дистрибьютиве, например Fedora, то там путь может отличаться.

тогда поставьте федору 32, и собирайте там. Иначе у вас всё равно будет через ж.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: