在FreeBSD中运行Linux程序

3
尝试在FreeBSD操作系统中运行程序时,我得到了以下结果:
$ ./myprogram
ELF二进制类型“0”未知
./myprogram:1:语法错误:“&”意外(期望“)”) $ file myprogram
myprogram:ELF 32位LSB可执行文件,Intel 80386,版本1(SYSV), 动态链接(使用共享库),适用于GNU / Linux 2.6.15, 未剥离
该程序在Ubuntu计算机上使用GCC构建。我该怎么办?我能否通过更改一些构建选项在Ubuntu计算机上为FreeBSD构建该程序,还是需要在FreeBSD操作系统中构建它?也许有一种将可执行文件转换为FreeBSD识别的格式的方法?
4个回答

8

谢谢。这意味着我没有什么神奇的解决方案,可以在我的Ubuntu计算机上使用GCC构建FreeBSD二进制文件? - Alex F
1
这是可能的(称为交叉编译),但不一定是最简单的解决方案。也许有一个安装GCC的FreeBSD软件包;我在这里无法真正帮助你。 - Bastien Léonard

3
尝试使用brandelf将可执行文件标记为linux可执行文件(您仍然需要设置所有依赖的库,或尝试静态链接)。 这里是brandelf的文档。

3

2021-06-21: 此答案已过时。从2021年起,FreeBSD包括Linux®二进制兼容性,可以运行大多数Linux二进制文件,除了那些“过度使用i386™特定调用的二进制文件,因为启用虚拟8086模式”。


许多Linux程序可以在BSD系统上编译,但它们不是相同的操作系统。从技术上讲,Linux和BSD不是二进制兼容的。

现在,BSD配备了一个针对Linux的ABI(应用程序二进制接口),它将实时翻译Linux sys-calls(类似于WINE的操作方式)。这将允许您在BSD系统上运行Linux ELF二进制文件,但会有一定的性能损失。

尽管如此,它们仍然不是相同的操作系统,您最好为目标系统编译程序,要么通过获得访问权限,要么使用交叉编译的方法。


1
现在这个信息是错误的,因为存在用于运行Linux®程序的子系统。 - fuz
@fuz - 为什么不直接使用新信息更新我的答案呢? - zellio
因为那样会改变答案,甚至使作者的意图无法被识别。 - fuz
@zellio 我已经在这个答案上添加了一条注释。这些信息明显已过时。我没有修改原始答案,在注释下方保留了它。 - dwlz

1

运行命令brandelf -t "Linux",这样应该可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接