Программа Linux во FreeBSD
Вопрос
Пытаясь запустить мою программу в ОС FreeBSD, я получаю следующие результаты:
$ ./myprogram ELF binary type "0" not known ./myprogram: 1: Syntax error: "&" unexpected (expecting ")") $ file myprogram myprogram: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
Программа встроена в GCC на компьютере Ubuntu.Что я могу сделать?Могу ли я собрать программу для FreeBSD на моем компьютере Ubuntu, изменив некоторые параметры сборки, или мне нужно собрать ее в ОС FreeBSD?Может быть, есть какой-то способ преобразовать исполняемый файл в формат, распознаваемый FreeBSD?
Решение
Большое количество программ Linux может быть скомпилировано на системах BSD, однако это не одна и та же операционная система.Linux и BSD технически несовместимы с двоичными файлами.
В наши дни BSD поставляется с ABI (Application Binary Interface) для Linux, который будет переводить системные вызовы Linux "на лету" (во многом так работает WINE).Это позволит вам запускать двоичные файлы Linux ELF в системах BSD с небольшим снижением производительности.
При этом это не одна и та же операционная система, и лучше всего было бы скомпилировать ее для целевой системы либо путем получения к ней доступа, либо с помощью метода перекрестной компиляции.
Другие советы
Вы можете запускать множество программ Linux на FreeBSD, см. http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/linuxemu.html.
Если это не сработает, самым простым решением было бы перекомпилировать вашу программу на FreeBSD.
Попробуйте заклеймить исполняемый файл как исполняемый файл Linux с помощью brandelf (хотя вам все еще нужна настройка всех зависимых библиотек, или попробуйте связать его статически
назовите себя "Linux", и это должно сработать.