Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在Mac OS X上构建跨工具链的最佳方法_Linux_Macos_Cross Compiling - Fatal编程技术网

Linux 在Mac OS X上构建跨工具链的最佳方法

Linux 在Mac OS X上构建跨工具链的最佳方法,linux,macos,cross-compiling,Linux,Macos,Cross Compiling,我花了三周的时间研究MacOSX下的交叉开发。我想获得两个不同的结果,但我相信它们可以通过同样的途径实现。 我想 使用我最近在家里买的iMac(OS X 10.6,64位本机),设置distcc来帮助我的Gentoo笔记本电脑,我也使用iOS开发,所以Xcode 4工具已经存在 开发我的宠物项目,这是一个针对x86、x86_64和arm的elf内核(由于它是OT,我将在这里停止) 因此,在这些案例中我们都做了很多思考之后,我想到了一个想法,为了达到第一个目标,我需要建立一个i686 pc lin

我花了三周的时间研究MacOSX下的交叉开发。我想获得两个不同的结果,但我相信它们可以通过同样的途径实现。 我想

  • 使用我最近在家里买的iMac(OS X 10.6,64位本机),设置distcc来帮助我的Gentoo笔记本电脑,我也使用iOS开发,所以Xcode 4工具已经存在
  • 开发我的宠物项目,这是一个针对x86、x86_64和arm的elf内核(由于它是OT,我将在这里停止)
  • 因此,在这些案例中我们都做了很多思考之后,我想到了一个想法,为了达到第一个目标,我需要建立一个i686 pc linux gnu工具链(或者是i686未知linux gnu?),它具有所有适当的版本(例如gcc-4.4),并使其可由distcc调用。这似乎是一项合理的任务,但不幸的是,似乎有更清晰的工具和说明来为不知名的Arch(如sparc或mips)构建工具链,而没有一个关于如何以最佳方式使用x86的合理更新资源。因此,第一个问题是:有没有人成功地构建了这样一个工具链,并愿意分担痛苦

    第二个进球。我目前的工作台是由i686笔记本电脑上的Gentoo(是的,与第一个目标相同)和所有常规开发工具组成的,我使用QEMU来测试它(它的gdb集成非常棒)。我真正想做的是在旅行时继续使用笔记本电脑(我经常上下班),回家后继续在iMac上工作和测试(git在这方面非常棒)。因此,第二个问题是:有没有人做过类似的事情,并想与我们分享

    我非常感谢您的任何意见。真的


    编辑我了解MacPorts、crosstool和crosstool ng。我试着从MacPorts安装i386 elf binutils 2.18,只是发现我的笔记本电脑中有2.20。此外,我无法让gcc44生成i686 pc linux gnu elf对象,使用i386 elf gcc也不是一个选项,因为我需要4.4,而打包的是4.3。

    这不是一个容易的任务,特别是因为您需要为这么多不同的平台交叉编译

    最常用的方法是使用所需的操作系统(例如)运行虚拟机,并安装工作台工具以从中工作。这是非常经常使用的,因为它的设置并不复杂,而且它还使得为目标系统编写、测试和调试代码变得更容易

    当然,如果你搜索得足够多,你会发现在Mac OS X上设置工具链和为其他架构编译代码的各种黑客/技巧:

    • 这些用途之一,但这意味着没有对MacOSX的官方支持

    • 另一个也很有趣的是,它提供了一个.dmg包,其中包含了实现此功能所需的工具


      • 您已经提到Gentoo,所以我想您应该看看。Gentoo Prefix允许您在用户定义的目录(=Prefix)中安装小型Gentoo系统。从这里开始,您可以启动一个shell,它允许您使用portage(=Gentoo的包系统),这应该使您能够安装必要的工具


        我不知道今天OSX上的前缀是什么形状,但大约一年前我就可以把它安装到朋友的MacBook上了。如果您感兴趣,我可以提供更多关于的详细信息,这可能有点棘手。

        虚拟机方法可能适用于distcc案例(在某个时候,我确实考虑过它,然后出于一些合理的原因将其丢弃),但我认为对于另一个案例,它会有点尴尬,因为我必须在网上导出我的源目录,将其装载到VM中,并从VM启动构建过程。工作流程并不顺畅。预构建的解决方案通常是不可行的,因为对于distcc,您需要完全相同的次要版本,即4.4.x和4.5.y意味着kaboom。我认为在这种情况下测试预构建的解决方案是值得的。另一种方法是自己构建工具:我尝试过,但不久就失败了。然后我尝试了crosstool ng,它似乎工作得很好,尽管它引起了大量的挫折和困惑。这可能不是它的错,而是MacOSX的错,它是一个BSD,有许多无法解释的假设,比如不区分大小写的文件系统。到目前为止,这似乎是最有希望的方法。两者都不可行。Buildroot似乎与SL/Lion不太兼容,另一个版本不提供我需要的gcc-4.4版本。不过,感谢您的提示。我已经尝试了Prefix,不幸的是它安装了一个本机工具链(特别是针对x86_64-apple-darwin10的工具链)。Gentoo中有一个很好的工具叫crossdev,但它在Prefix中没有出现。让我看看build.log。