Как? Не хотелось бы специально FreeBSD ставить.. мож ключик какой в gcc поставить, аль утилита какая есть? Помогите плиз ...
Можно скомпилить как обычно, а в FreeBSD поставить linux compability, обработать готовый файл brandelf'ом( brandelf -tLinux a.out ) и запускать как обычно. Должно работать.
Большое спасибо, но вот только FreeBSD находиться на сервере хостинг-провайдера моего заказчика и менять там естесственно я ничего не могу( А другие есть варианты?
LinkFly Брандинг можно и хекс-редактором поменять, если предварительно посмотреть спецификацию по ELF. Там всего лишь один байтик нужно подправить в заголовке. Статические линуксовые экзешники в БСД работать не будут, т.к. в БСД используется другое соглашение для вызова системных функций. Фокус с брандом проходит только для динамических. Да, надёжнее всего, конечно, линковать всё в родной БСДе, а то иногда линкер одной системы заполняет поля экзешника таким образом (интерпретатор, атрибуты и последовательность секций), что загрузчик другой потом начинает крутить носом.
Quantum > Статические линуксовые экзешники в БСД работать не будут, > т.к. в БСД используется другое соглашение для вызова системных функций. > Фокус с брандом проходит только для динамических. насколько я знаю бзди, соглашение там гибридное. только не скажу точно с какой версии... и бзди 4.5 нормально переваривает программы с сискалами от линуха. не все, конечно, т.к. даже у самого линуха в разных ядрах сисколы слегка отличаются...
kaspersky Наверно, это зависит от бранда и от установленного пакета совместимости. Во всяком случае, линуксовые стандартные сисколы (проверял конкретно read и seek) на 5й FreeBSD у меня не проходят, пока параметры в стек не запихну, но никакого пакета совместимости я не ставил. Конечно, ничто не мешает одновременно пихать параметры в стек и присваивать в регистры, как я обычно делаю для пущей совместимости
Quantum ммм... да... прараметры надо пихать в стек.. но я имел ввиду, что BSD так же поддерживает far call'ы, только если их заюзать - прога не запустится на линухе а написать программу, запускающуся на линухе и bsd - несложно. другое дело, что придется ограничится только базовыми сускалами, да и то... я столкнуся с одной странностью, что при чтении /dev/mem под 4.5 BSD (более свежие версии не проверял) read всегда возвращает позитивный результат даже если море, тьфу, /dev/mem уже кончился, в отличии от Linux'а...
kaspersky Во FreeBSD системная функция brk всегда выравнивает адреса выделяемой памяти, в отличие от Линукса, где память в куче автоматически не выравнивается. Ещё есть какая-то особенность в реализации функции fseek, но это уже в сишной либе, из-за которой она не работает если у дескриптора файла нет доступа на запись (если он находится на CD, к примеру). При этом системная функция seek прекрасно работает. Проверял только на FreeBSD 5. Наверно, если повозиться ещё немного с портированием линуксового кода под BSD, можно обнаружить кучу принципиальных отличий даже в плане POSIX-совместимости
Quantum > Наверно, если повозиться ещё немного с портированием линуксового кода > под BSD, можно обнаружить кучу принципиальных отличий даже в плане > POSIX-совместимости вот потому сорцы программы и кишат #define, учитывая особенности разных осей