【问题标题】:Linux program in FreeBSDFreeBSD 中的 Linux 程序
【发布时间】:2011-01-31 04:09:16
【问题描述】:

尝试在 FreeBSD 操作系统中运行我的程序,我得到以下结果:

$ ./我的程序 ELF 二进制类型“0”未知 ./myprogram: 1: 语法错误:“&”意外(预期“)”) $文件我的程序 myprogram:ELF 32 位 LSB 可执行文件,Intel 80386,版本 1 (SYSV), 动态链接(使用共享库),对于 GNU/Linux 2.6.15, 未剥离

该程序是在 Ubuntu 计算机上使用 GCC 构建的。我能做些什么?我可以通过更改一些构建选项在我的 Ubuntu 计算机上构建 FreeBSD 程序,还是我需要在 FreeBSD 操作系统中构建它?也许有一些方法可以将可执行文件转换为 FreeBSD 识别的格式?

【问题讨论】:

    标签: linux build freebsd


    【解决方案1】:

    您可以在 FreeBSD 上运行很多 Linux 程序,请参阅 http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/linuxemu.html

    如果这不起作用,最简单的解决方案是在 FreeBSD 上重新编译您的程序。

    【讨论】:

    • 谢谢。这意味着,我没有一些神奇的解决方案,它允许在我的 Ubuntu 计算机上使用 GCC 构建 FreeBSD 二进制文件?
    • 有可能(称为交叉编译),但不一定是最简单的解决方案。也许有一个为 FreeBSD 安装 GCC 的软件包;我真的帮不了你。
    【解决方案2】:

    2021-06-21:此答案已过时。截至 2021 年,FreeBSD 包括 Linux® binary compatibility,它将运行大多数 Linux 二进制文件,除了那些“过度使用 i386™ 特定调用,以启用虚拟 8086 模式”的文件。


    大量的 Linux 程序可以在 BSD 系统上编译,但它们不是同一个操作系统。 Linux 和 BSD 在技术上不兼容二进制。

    如今,BSD 附带了一个用于 Linux 的 ABI(应用程序二进制接口),它将即时翻译 Linux 系统调用(与 WINE 的操作方式类似)。这将允许您在 BSD 系统上运行 Linux ELF 二进制文件,而性能损失很小。

    话虽如此,它们不是同一个操作系统,最好的办法是通过访问目标系统或使用交叉编译方法为目标系统进行编译。

    【讨论】:

    • 这个信息现在是错误的,因为存在运行 Linux® 程序的子系统
    • @fuz - 为什么不用新信息更新我的答案?
    • 因为这会将答案更改为作者的意图不再可识别的程度。
    • @zellio 我已在此答案中添加了注释。这些信息显然已经过时了。我在注释下方未修改原始答案。
    【解决方案3】:

    尝试使用 brandelf 将可执行文件标记为 linux 可执行文件(但您仍然需要设置所有依赖库,或者尝试静态链接它

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

    【讨论】:

      【解决方案4】:

      brandelf -t "Linux" 它应该可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-27
        • 2014-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-26
        相关资源
        最近更新 更多