Как выполнить 32 битных программы на Fedora 17 на 64 бита?

То, что последняя строка в файле не имеет новой строки (\n)

10
07.12.2012, 12:43
3 ответа

Относительно затмения, не бывшего способного найти adb, и т.д., это, потому что без 32-разрядных общих библиотек должен был выполнить их в системе, они не исполняемый файл.

Относительно 32-разрядных библиотек ситуация довольно проста: просто необходимо установить соответствующее 32-разрядное, освобождает. На 64-разрядной мягкой фетровой шляпе 17 установок, которые я имею здесь, основные 64-разрядные библиотеки, находятся в/usr/lib64, и дополнительный 32-разрядный освобождает, находятся в/usr/lib. Так, если я звоню ldd на на sdk/platform-tools/adb:

linux-gate.so.1 =>  (0xf7791000)
librt.so.1 => /lib/librt.so.1 (0xf776c000)
libncurses.so.5 => /lib/libncurses.so.5 (0xf7747000)
libpthread.so.0 => /lib/libpthread.so.0 (0xf772d000)
libstdc++.so.6 => /lib/libstdc++.so.6 (0xf7644000)
libm.so.6 => /lib/libm.so.6 (0xf7618000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xf75fb000)
libc.so.6 => /lib/libc.so.6 (0xf7449000)
/lib/ld-linux.so.2 (0xf7792000)
libdl.so.2 => /lib/libdl.so.2 (0xf7444000)
libtinfo.so.5 => /lib/libtinfo.so.5 (0xf7424000)

Заметьте, что они - все в / lib, который является символьной ссылкой на/usr/lib (не/usr/lib64). Посмотрите:

»file /lib/libc.so.6
/lib/libc.so.6: symbolic link to `libc-2.15.so'
»file /lib/libc-2.15.so
/lib/libc-2.15.so: ELF 32-bit LSB shared object [...]

32-разрядная стандартная библиотека для C. То, что можно сделать, проходят 32-разрядные sdk инструменты и проверку для наблюдения то, против чего они связаны с ldd. У меня нет примера под рукой, но если что-то отсутствует ldd отчеты что-то как:

libc.so.6 => ??????

Во-первых, tho, чтобы ldd работал, Вам будет нужен 32-разрядный загрузчик, который идет с 32-разрядным glibc (без этого, ldd назовет его неисполняемым файлом и ничего не скажет Вам):

»yum search glibc
glibc.i686 : The GNU libc libraries
glibc.x86_64 : The GNU libc libraries

Это является усеченным, но x86_64 пакет - то, что Вы уже имеете; i686 является 32-разрядной версией. Поэтому просто установите это.

Вам не нужен ни один из 'devel' пакетов, поскольку ничто не компилируется. Кроме того, образованные предположения и yum whatprovides / yum search должен помочь (рассмотрение списка для adb, существуют также 32-разрядные версии lib C++, ncurses, pthreads, и я немного вещей, которые я не знаю).

Быстрая подсказка об использовании whatprovides:

»yum whatprovides libtinfo
No matches found.
»yum whatprovides libtinfo.so.5
[2 matches]
»yum whatprovides "*/libtinfo.so.5"
[4 matches]

;)

9
27.01.2020, 20:00
  • 1
    хорошо, я попытаюсь установить i686 версии библиотек, отображенных через ldd. По причине: Я не убежден, звоня file на версии комплекта adb дисплеи: ELF 32-разрядный исполняемый файл LSB, Intel 80386 - ничто, чтобы сделать с эмуляцией ARM - и/usr/bin/adb (от фетрового пакета инструментов андроида) не на самом деле доступно как ELF 64-разрядный исполняемый файл LSB, x86-64. –  maxschlepzig 07.12.2012, 17:16
  • 2
    Если я обращаюсь к ldd adt-bundle-linux/sdk/platform-tools/adb это отображает 'не динамический исполняемый файл'. Относительно ПУТИ - это не проблема - полностью определение пути, например. ./adt-bundle-linux/sdk/platform-tools/adb в терминале не работает (результаты в 'zsh: никакой такой файл или каталог [..]'). –  maxschlepzig 07.12.2012, 17:24
  • 3
    У Вас есть glibc.i686 установленным уже? Как я сказал, Вам (вероятно), нужен 32-разрядный загрузчик для ldd для работы, и это будет с glibc пакетом. WRT adb быть 32-разрядной дугой Intel, поэтому это - Ваша система, что-то скомпилированное для ARM не будет работать там. Однако тот же 32-разрядный материал мог быть скомпилирован для ARM, и я предполагаю, что части его - при использовании на устройствах на базе Android. Я признаю, могло бы быть неправильным относительно того являющегося необходимостью, но в любом случае, это - то, что доступно, и это не действительно так большая часть стычки. –  goldilocks 07.12.2012, 17:42
  • 4
    WRT путь, возможно, это не необходимо для затмения, и (как Вы говорите), можно получить ту же ошибку на командной строке, если файл не может быть выполнен так или иначе. Просто установите освобождение, и т.д., и Вы узнаете. –  goldilocks 07.12.2012, 17:44
  • 5
    Нет никакого отношения между эмулятором, являющимся 32-разрядной программой и эмулированной платформой, имеющей 32-разрядный процессор. Эмулятор Android на самом деле основан на Qemu, который может эмулировать любой из (32-разрядных) armv7, armv8 (64-разрядный), x86, amd64, миллион операций в секунду, mips64, и намного больше, независимо от архитектуры хоста. –  Gilles 'SO- stop being evil' 08.12.2012, 00:24

Необходимо установить 32 бита glibc:

# yum install glibc.i686

Это удаляет введение в заблуждение 'никакого такого файла или каталога' сообщение при попытке выполнить двоичный файл на 32 бита. С этим система Fedora на 64 бита способна к выполнению двоичных файлов на 32 бита.

Это также удаляет вводящее в заблуждение 'не динамическое исполняемое' сообщение ldd при вызове ldd на динамическом исполняемом файле на 32 бита.

Теперь необходимо установить недостающие библиотеки на 32 бита двоичные файлы под adt-bundle-linux/sdk/platform-tools связаны против:

# yum install zlib.i686 libstdc++.i686 ncurses-libs.i686 libgcc.i686

Вот именно.

Фон

Некоторый фон, как получить вышеупомянутые имена пакета. Например, смотря на вывод

$ ldd adb
linux-gate.so.1 =>  (0xf774f000)
librt.so.1 => /lib/librt.so.1 (0xf7725000)
libncurses.so.5 => not found
libpthread.so.0 => /lib/libpthread.so.0 (0xf770b000)
libstdc++.so.6 => not found
libm.so.6 => /lib/libm.so.6 (0xf76df000)
    [..]

средства, это 2 библиотеки все еще отсутствуют для adb.

Для каждого 'не найденного' у нас есть к поиску имя пакета, например:

$ yum whatprovides '*libstdc++.so.6'
[..]
libstdc++-4.7.2-2.fc17.i686 : GNU Standard C++ Library
[..]

Теперь мы берем имя основания корпуса и добавляем '.i686' к нему для получения версии на 32 бита.

8
27.01.2020, 20:00
  • 1
    Этот ответ является большим, особенно первая часть - действительно установка glibc.i686 позволяет ldd работать правильно с i386 двоичными файлами. –  Krystian 22.01.2018, 15:08

Можно установить необходимый пакет с:

sudo yum install redhat-lsb.i686
2
27.01.2020, 20:00

Теги

Похожие вопросы