Ошибка linux [not a dynamic executable]

Тема в разделе "WASM.BEGINNERS", создана пользователем M0rg0t, 15 дек 2018.

  1. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Написал простой хелловорлд под линукс, собрал с помощью gcc на локальной убунте 12. Там запускается, через ./hello .
    При попытке же запустить эту софтину на серверах (убунта и центос) , она не запустилась. Пишет ошибку, что файл не найден, хотя ес-но он есть. А ldd показывает, что это не executable. Мистика.

    В общем, пишут что якобы 32 битные эльфы (или что там в линукс) не запускаются под 64 битными ОС (собирал я 32 бит, а серверные - 64 битные). Так ли это? Если так:

    - как быть, реально ли сделать кросс-архитектурное приложение для линуксов?
    - почему так и почему линуксоиды ругают винду, где WOW64 искоробки?
     
  2. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    988
    интересно, надо посмотреть. Наверно elf спотыкается когда себя по разным адресам раскидывает. Можно парсером воспользоваться, что бы посмотреть структурку https://ide.kaitai.io/

    а архитектура(процы) на серверах и лок.убунте одна?

    The 5th byte of a Linux binary executable file (ELF format, see wikipedia) is 1 for a 32 bit executable, 2 for a 64 bit executable.
     
    Последнее редактирование: 15 дек 2018
  3. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Черт его знает, это две впски (сервера) и виртуалбокс (локально).
    Я на сервере пересобрал хелловорлд, т.е. сделал 64 битное - и все работает. Но очень удивило, что этого нет по дефолту.

    Да, проверил эти файлы - так и есть.

    Могу вам залить , если интересно. Но там обычный printf да и все.
     
  4. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    988
    Может тогда
    cat /proc/cpuinfo
    или uname -m
    ?
    Мне казалось, что файл должен стартануть. Этот бит, для ld-linux.so, а он должен знать что делать. Сейчас вечер для фильмов :) хелло ворлд я собирать умею, в понедельник наверно отпишусь, как поиграюсь. Если будет актуально, и кто-нибудь не разложит все по полочкам раньше.
     
  5. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Регистрация:
    21 мар 2017
    Сообщения:
    1.082
    Моргот
    Ты выложи cвой хелоуворд, может там чего.
    Нет, таких ошибок быть не должно. У меня щас програмки
    лежат в home/user, и права на них:
    ls -al папка
    drwxr_xr_r
    ls -al *.out
    _rwxr_xr_r
     
    UbIvItS нравится это.
  6. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.074
    можь просто chmod 700 ./hello
    :)
     
  7. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Регистрация:
    21 мар 2017
    Сообщения:
    1.082
    Да и ещё, из под рута ты конечно же запускал?
    # ./hellou
    Может у тебя не тот пользователь выставлен просто.
    --- Сообщение объединено, 15 дек 2018 ---
    Может у тебя стоит
    ls -al файл
    user1 user1
    или
    root user
    а ты выполняешь из под user
     
  8. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    988
    у меня на двух машинах отписал тоже что нет такого файла, дело не в правах.
    первая uname -m x86_64
    а вторая i686
    opcode ы то разные
     
    Последнее редактирование: 15 дек 2018
  9. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Регистрация:
    21 мар 2017
    Сообщения:
    1.082
    q2e74
    Ну ты же туда установил операционную систему,
    со всеми программами, и ничего всё работало да?
     
  10. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.074
    лучше устанавливать либы x86_64 & i686 для поддержки 32бит прожек. если прожка под другой дистрой намертво не хочет запускаться, то..

    1. разрешения на файл не выставлены.
    2. либ для запуска нет (не та архитектура и/ль версия).
    3. мб и несовместимость с настройками ядра.
     
  11. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    тут надо иметь ввиду, что линукс интегрированная система, ты должен собирать исходник на самой машине, чтобы совпадали все версии библиотек и рантаймов... ну или линковать статически... я еще натыкался на такую вещь, что что-то менялось в формате ЕЛФ от версии к версии, я передавал какие-то флаги линкеру для совместимости со старыми линуксами, но убей меня не помню конкретно, в чем там была проблема...
     
  12. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Я не линуксоид, но тут не в правах дело, про chmod и прочее я немного в курсе. Ставил 777, владельцем делал юзера , или от рута пробовал. Тут именно архитектурное решение. Во вложении файл, собран обычным GCC , выводит строку. На 64 битных ОС не работает. Когда пересобрал его же на 64 битной Убунте (те же параметры), заработало и на центос.

    Rel, плохо это. Не ради холивара, но винда в этом плане намного лучше. Если конечный пользователь не может / не хочет собирать файл из сорцев? Или мы пишем малварь? Как быть - я думал разве что упаковать все это дело в скрипты (пхп, перл, петон) и распаковывать в зависимости от ОС. Но это подойдет для хелловорлдов, для серьезных прог хз что делать.
     

    Вложения:

    • hello32.zip
      Размер файла:
      2,4 КБ
      Просмотров:
      253
  13. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    988
    M0rg0t, скорее всего, gcc нужны ключики на сборке в 32-х битной версии. Потому как между 32 и 64 даже системные вызовы идут под другими номерами.
     
  14. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    ну у каждой системы есть репозиторий с софтом, который мейнтенят либо разработчики софта, либо разработчики системы... для большинства систем щас многое довольно универсально, в том плане, что при статической линковке ничего больше не нужно... тот момент, про который я говорил, актуален для запуска с новой системы на старую...
    --- Сообщение объединено, 15 дек 2018 ---
    https://phusion.github.io/holy-build-box/
     
  15. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Регистрация:
    21 мар 2017
    Сообщения:
    1.082
    Моргот.
    Ну у меня выполнился
    6 hello linux
    Ты сырец бы показал.
     
    UbIvItS нравится это.
  16. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.074
    угу, холивар не ради холивара, воИстЕну глаголю :) вот зацени ситуацию: ты не можешь запустить хеллоу ворд и начинаешь делать некие долгоиграющие выводы :grin:
     
  17. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Думаете, если статически слинковать, должно пойти 32 битное на 64?

    на 64 битной? Я тестил на убунте, центос и каком-то безымянном шелле.

    Ну а какие мне делать выводы, если тут нет искоробки wow64?
    --- Сообщение объединено, 16 дек 2018 ---
    Вот фтп какой-то (не мой, поэтому заходите с прокси , чтобы потом не было непоняток)
    Код (Text):
    1. vh26830.hv4.ru - хост
    2. Логин: vh26830
    3. Пароль: 236LjdOt2z
    Я туда копирую 2 хелловорда, 1 собран на 32 битной убунте, второй - на 64 битной. 32 битный не запускается, 64 битный запускается и выводит строку. Тестить через php скрипт, вида echo passthru('./hello32'); , предварительно установив chmod 777.
     
  18. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    вряд ли...

    он и не нужен, все приложения нативные по-умолчанию... некоторые умудряются запускать 32-битный код, но для этого придется немного потанцевать с бубном типа:
    dpkg --add-architecture i386
    apt-get update
    apt-get install libc6:i386 libcurl3:i386
    --- Сообщение объединено, 16 дек 2018 ---
    [​IMG]
     
  19. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Интересно, почему так. А между линуксами вообще есть различия, в плане - софт на убунте собранный , может не работать в дебиане (понятно, что хелловорлд вроде запустился, но это примитив, я про более серьезные проги)?
     
  20. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    скорее всего заработает, если тот дебиан был базой для той убунты, если нет, то могут быть проблемы с либами... ну опять же всегда можно статически слинковать и для большинства софта это будет норм... например у меня на линукс минте (который сделан на базе убунты, которая сделана на базе дебиана) стоит клиент яндекс диска статически слинкованный и вполне себе нормально работает... та же история с кокос рипером...
    --- Сообщение объединено, 16 дек 2018 ---
    вообще нужно понимать, что это преимущество системы, а не ее недостаток... весь поставляемый с софт компилится с версиями библиотек, которые протестированны и хорошо интегрируются с системой... софт ставится из проверенных источников, хеши релизов сверяются и тд... ну и малвари под линукс значительно меньше в частности по этому... я не вижу тут никаких проблем...