Программа для Linux во FreeBSD - PullRequest
2 голосов
/ 24 марта 2010

Пытаясь запустить мою программу в ОС 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?

Ответы [ 4 ]

8 голосов
/ 24 марта 2010

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

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

3 голосов
/ 23 апреля 2010

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

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

3 голосов
/ 24 марта 2010

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

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

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

1 голос
/ 28 февраля 2015

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

...