Программа 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?


person Alex F    schedule 24.03.2010    source источник


Ответы (4)


2021-06-21: этот ответ устарел. С 2021 года FreeBSD включает бинарную совместимость с Linux®, которая будет работать в большинстве Двоичные файлы Linux, за исключением тех, которые чрезмерно используют специальные вызовы i386 ™, как включение виртуального режима 8086.


Большое количество программ для Linux можно скомпилировать в системах BSD, однако это не одна и та же операционная система. Linux и BSD технически несовместимы в двоичном формате.

В настоящее время BSD поставляется с ABI (бинарным интерфейсом приложений) для Linux, который переводит системные вызовы Linux на лету (как работает WINE). Это позволит вам запускать бинарные файлы Linux ELF в системах BSD с небольшим снижением производительности.

При этом они не являются одной и той же операционной системой, и вам лучше всего будет скомпилировать для целевой системы, либо получив к ней доступ, либо используя метод кросс-компиляции.

person zellio    schedule 24.03.2010
comment
В настоящее время эта информация неверна, поскольку существует подсистема для запуска программ Linux®. - person fuz; 18.12.2016
comment
@fuz - почему бы просто не обновить мой ответ новой информацией? - person zellio; 20.12.2016
comment
Потому что это изменило бы ответ до такой степени, что намерения авторов больше не распознаются. - person fuz; 20.12.2016
comment
@zellio Я добавил примечание к этому ответу. Эта информация явно устарела. Я оставил исходный ответ без изменений под примечанием. - person dwlz; 23.06.2021

На FreeBSD можно запускать множество программ для Linux, см. http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/linuxemu.html.

Если это не сработает, самым простым решением будет перекомпилировать вашу программу на FreeBSD.

person Bastien Léonard    schedule 24.03.2010
comment
Спасибо. Это означает, что у меня нет какого-то волшебного решения, позволяющего собирать бинарные файлы FreeBSD с помощью GCC на моем компьютере с Ubuntu? - person Alex F; 24.03.2010
comment
Это возможно (это называется кросс-компиляция), но это не обязательно самое простое решение. Может быть, есть пакет, устанавливающий GCC для FreeBSD; Я не могу помочь вам здесь. - person Bastien Léonard; 24.03.2010

Попробуйте заклеймить исполняемый файл как исполняемый файл linux, используя brandelf (хотя вам все равно нужно настроить все зависимые библиотеки, или попробуйте связать его статически

http://www.freebsd.org/cgi/man.cgi?query=brandelf&apropos=0&sektion=0&manpath=FreeBSD+8.0-RELEASE&format=html

person Gautham Ganapathy    schedule 23.04.2010

brandelf -t "Linux" и должно работать.

person qwkslvr    schedule 28.02.2015