Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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
是否可以创建一个基于MingW/MSYS的Windows工具链来为Linux编译依赖Glibc的应用程序?_Windows_Mingw_Cross Compiling_Glibc - Fatal编程技术网

是否可以创建一个基于MingW/MSYS的Windows工具链来为Linux编译依赖Glibc的应用程序?

是否可以创建一个基于MingW/MSYS的Windows工具链来为Linux编译依赖Glibc的应用程序?,windows,mingw,cross-compiling,glibc,Windows,Mingw,Cross Compiling,Glibc,我在遵循指令,构建一个可以在Windows上运行的工具链,并为Linux和不同的硬件平台编译应用程序。起初,我尝试为i686linux创建交叉编译器,以便在通用debian8系统上进行测试 Binutils和GCC编译得很好,但我被Glibc卡住了。它告诉我: *** The GNU C library is currently not available for this platform. 我看到Sysprogs工具链使用Newlib而不是Glibc,但除了Newlib是嵌入式设备的好选择

我在遵循指令,构建一个可以在Windows上运行的工具链,并为Linux和不同的硬件平台编译应用程序。起初,我尝试为i686linux创建交叉编译器,以便在通用debian8系统上进行测试

Binutils和GCC编译得很好,但我被Glibc卡住了。它告诉我:

*** The GNU C library is currently not available for this platform.
我看到Sysprogs工具链使用Newlib而不是Glibc,但除了Newlib是嵌入式设备的好选择之外,我没有找到任何解释

这是否意味着Newlib实际上是Windows->Linux的唯一选择,并且没有办法编译依赖Glibc的软件?也许有一些“骗局”,比如从目标平台复制预构建的Glibc或其他解决方法

理论上,我甚至不需要在Windows上构建Glibc,我只需要为目标体系结构构建一些“Glibc兼容存根”,以便在为目标平台和操作系统编译时链接(当然,仅动态链接)。或者我完全错了,GCC不能链接到不同的C库,而不是GCC本身链接到的库

或者我应该忘记这一点,接受这样一个事实:从Windows到GNU/Linux的交叉编译不可能(而且很可能永远不可能)实现完全兼容Glibc和Linux内核的C/C++吗


我将接受解释GCC和Glibc之间关系的答案,以及是否有可能链接不同于GCC本身构建时使用的C库的Glibc,并提供一些关于为什么它是/不可能的见解。

我猜您在构建glibc时使用的是
--target
,而您确实需要使用
--host
(这与newlib的配置方式不同--最好不要问为什么)

这就是说,glibc构建系统需要一个区分大小写的文件系统,因为它创建像
foo.oS
foo.oS
这样的文件,这两个文件是截然不同的。在像Windows这样的系统上,这意味着构建将被破坏并失败,因为
foo.oS
foo.oS
引用了相同的文件。有一些补丁可以解决这个问题,但实际上你最好启动一个虚拟机并在其中构建工具链

注意:我不是说你需要虚拟机来完成你所有的开发。您只需要VM来构建交叉编译器,然后在Windows下运行。这将是一个构建


与其自己动手做这一切,不如退房。它处理/修补/修复了人们在尝试创建交叉编译器时所犯的许多常见错误。

我猜当您确实需要使用
--host
(这与newlib的配置方式不同--最好不要问为什么)时,您在构建glibc时使用了
--target

这就是说,glibc构建系统需要一个区分大小写的文件系统,因为它创建像
foo.oS
foo.oS
这样的文件,这两个文件是截然不同的。在像Windows这样的系统上,这意味着构建将被破坏并失败,因为
foo.oS
foo.oS
引用了相同的文件。有一些补丁可以解决这个问题,但实际上你最好启动一个虚拟机并在其中构建工具链

注意:我不是说你需要虚拟机来完成你所有的开发。您只需要VM来构建交叉编译器,然后在Windows下运行。这将是一个构建


与其自己动手做这一切,不如退房。它处理/修补/修复了人们在尝试创建交叉编译器时所犯的许多常见错误。

看在上帝的份上,为什么您会想要这样做,主要是因为我和我的同事习惯了Visual Studio,它有很好的代码编辑器和很好的调试器(最近还增加了对远程GDB调试的支持)。对于整个团队来说,学习在Linux上开发需要花费太多的时间。当然,最终的构建可以在目标机器上完成,我们无论如何都需要有经验的Linux开发人员,但是对于整个团队来说,使用熟悉的开发工具更方便。我在Windows和C方面有多年的经验。这是一个糟糕的想法,正如你所问。你敢把Windows放在开发链的任何地方的唯一原因是如果你是为Windows开发的。求求你,尽管这很好,不要让你自己头疼,不要这样做。用Linux构建Linux工具看在上帝的份上,你为什么要这么做,主要是因为我和我的同事习惯于Visual Studio,它有很好的代码编辑器和很好的调试器(最近还增加了对远程GDB调试的支持)。对于整个团队来说,学习在Linux上开发需要花费太多的时间。当然,最终的构建可以在目标机器上完成,我们无论如何都需要有经验的Linux开发人员,但是对于整个团队来说,使用熟悉的开发工具更方便。我在Windows和C方面有多年的经验。这是一个糟糕的想法,正如你所问。你敢把Windows放在开发链的任何地方的唯一原因是如果你是为Windows开发的。求求你,尽管这很好,不要让你自己头疼,不要这样做。使用Linux构建Linux工具