Экзешник для Linux и BSD (x86)

Тема в разделе "WASM.UNIX", создана пользователем Quantum, 9 мар 2006.

  1. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    В никсах я около недели назад был почти что ньюбом. Сильно не бейте...



    Пытаюсь сделать исполнимый модуль, который запускался бы и в любом Линуксе и в любом BSD (x86) без перекомпиляции. Возможно ли это в принципе? С чем столкнулся:



    1. Формат исполнимого модуля в BSD слегка отличается от формата линукса. С установленным пакетом совместимости с Linux в BSD, эти различия сводятся к значению одного байта в заголовке.

    2. Последние официальные версии LIBC в BSD и в Linux отличаются. Заставлять юзера настраивать ссылки на LIBC - не вариант. Поэтому решил отказаться от LIBC. Кажется, syscalls вполне совместимы, хотя соглашения вызова отличаются, но с этим я уже более-менее разобрался.



    Как быть с п1?



    На худой конец может сойти вариант с двумя экзешниками и скриптом, который детектит ось и запускает нужный экзешник.



    Может, есть более прямые пути? Ссылки и советы по сабжу приветствуются.
     
  2. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Quantum

    А чем утилита brandelf(1) не нравится?
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    EvilsInterrupt

    brandelf годится только если запущен пакет совместимости с линуксом, AFAIK. Мне бы для общего случая...



    А что если использовать a.out? BSD'шный a.out и линуксовый a.out одинаковые, если не учитывать поддержку динамической линковки? Последние версии линуксов и BSD всё ещё поддерживают a.out?



    Кстати, а можно слинковать эльф таким образом, чтобы версия LIBC не попадала в заголовок и интерпретатор (динамический линкер) использовал бы потом любую версию LIBC?
     
  4. konst

    konst New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2006
    Сообщения:
    2




    Думаю да, по крайней мере без libc.

    Если системные вызовы сводятся к read/write/exit,

    то даже не потребуется run-time определение ОС.



    По крайней мере простейший бинарник, запускающийся и под Linux и под FreeBSD

    (про остальные BSD не знаю, врать не буду) делается без проблем.

    Хитрость лишь в том, чтобы компилировать его нужно в FreeBSD, а не в линуксе :)
     
  5. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    handbook от FreeBSD: "Бинарные форматы":

     
  6. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    EvilsInterrupt

    Ясно. Спасибо!



    konst



    Уррррря!!! Спасибо огромное! Статический эльф отлично работает и во FreeBSD, и в двух разных версиях Debian, и в Mandrake. С остальными BSD проблем, думаю, быть не должно. И с другими популярными линуксами, наверное, тоже.
     
  7. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Сам Quantum мне спасибо сказал! Пойду распечатаю друзьям хвалиться буду! :)))