как скомпилировать прогу под FreeBSD в linux?

Тема в разделе "WASM.UNIX", создана пользователем LinkFly, 17 мар 2007.

  1. LinkFly

    LinkFly New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2006
    Сообщения:
    6
    Как? Не хотелось бы специально FreeBSD ставить.. мож ключик какой в gcc поставить, аль утилита какая есть? Помогите плиз ...
     
  2. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    Можно скомпилить как обычно, а в FreeBSD поставить linux compability, обработать готовый файл brandelf'ом( brandelf -tLinux a.out ) и запускать как обычно. Должно работать.
     
  3. LinkFly

    LinkFly New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2006
    Сообщения:
    6
    Большое спасибо, но вот только FreeBSD находиться на сервере хостинг-провайдера моего заказчика и менять там естесственно я ничего не могу:dntknw:( А другие есть варианты?
     
  4. LinkFly

    LinkFly New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2006
    Сообщения:
    6
    О! У них на shell-Доступе есть gcc и make, так что должно быть всё ок!
     
  5. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    LinkFly
    Брандинг можно и хекс-редактором поменять, если предварительно посмотреть спецификацию по ELF. Там всего лишь один байтик нужно подправить в заголовке.

    Статические линуксовые экзешники в БСД работать не будут, т.к. в БСД используется другое соглашение для вызова системных функций. Фокус с брандом проходит только для динамических.

    Да, надёжнее всего, конечно, линковать всё в родной БСДе, а то иногда линкер одной системы заполняет поля экзешника таким образом (интерпретатор, атрибуты и последовательность секций), что загрузчик другой потом начинает крутить носом.
     
  6. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    Quantum
    > Статические линуксовые экзешники в БСД работать не будут,
    > т.к. в БСД используется другое соглашение для вызова системных функций.
    > Фокус с брандом проходит только для динамических.
    насколько я знаю бзди, соглашение там гибридное.
    только не скажу точно с какой версии...
    и бзди 4.5 нормально переваривает программы с сискалами от линуха.
    не все, конечно, т.к. даже у самого линуха в разных ядрах сисколы
    слегка отличаются...
     
  7. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    kaspersky
    Наверно, это зависит от бранда и от установленного пакета совместимости. Во всяком случае, линуксовые стандартные сисколы (проверял конкретно read и seek) на 5й FreeBSD у меня не проходят, пока параметры в стек не запихну, но никакого пакета совместимости я не ставил.

    Конечно, ничто не мешает одновременно пихать параметры в стек и присваивать в регистры, как я обычно делаю для пущей совместимости :)
     
  8. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    Quantum
    ммм... да... прараметры надо пихать в стек..
    но я имел ввиду, что BSD так же поддерживает far call'ы,
    только если их заюзать - прога не запустится на линухе ;)

    а написать программу, запускающуся на линухе и bsd - несложно.
    другое дело, что придется ограничится только базовыми сускалами,
    да и то... я столкнуся с одной странностью, что при чтении /dev/mem
    под 4.5 BSD (более свежие версии не проверял) read всегда возвращает
    позитивный результат даже если море, тьфу, /dev/mem уже кончился,
    в отличии от Linux'а...
     
  9. Quantum

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

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

    Ещё есть какая-то особенность в реализации функции fseek, но это уже в сишной либе, из-за которой она не работает если у дескриптора файла нет доступа на запись (если он находится на CD, к примеру). При этом системная функция seek прекрасно работает. Проверял только на FreeBSD 5.

    Наверно, если повозиться ещё немного с портированием линуксового кода под BSD, можно обнаружить кучу принципиальных отличий даже в плане POSIX-совместимости ;)
     
  10. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    Quantum
    > Наверно, если повозиться ещё немного с портированием линуксового кода
    > под BSD, можно обнаружить кучу принципиальных отличий даже в плане
    > POSIX-совместимости ;)
    вот потому сорцы программы и кишат #define, учитывая особенности
    разных осей ;)