Answers:
如本博文所述,在GCC配置条款中已提及,--target
仅在编译工具链时适用。在对库或二进制文件进行常规交叉编译时,请使用
--build=the architecture of the build machine
--host=the architecture that you want the file to run on
然而,当你正在构建工具链,事情变得更加复杂。我认为以下是正确的(尽管我不能说我曾经手动编译过交叉调试器):
假设您有:
您将配置并构建调试服务器(例如gdbserver)以在嵌入式设备上运行
./configure --build=powerpc --host=mips
这样您就可以将腻子安装到嵌入式设备上并运行“ gdbserver:1234 a.out”以开始调试并监听端口1234。
然后,您将使用以下命令构建调试客户端(该客户端连接并控制gdbserver)
./configure --build=powerpc --host=i686 --target=mips
您可以将其复制到x86笔记本电脑,以便在该字段中可以运行“ gdbclient Embedded.device:1234”以调试a.out程序。
这也适用于编译器,您可能需要查看上面的GCC链接或有关加拿大交叉编译的本节。
还要注意,实际上,您可能看不到指定的内部版本,主机或目标,因为根据此Autoconf手册页,“目标默认为host,要构建的主机,以及根据config.guess结果生成的主机”。
总之,建立在代码--build
上运行它--host
与--target
建筑环境。
注意:--target
只有在编译器(例如GCC)时,参数才有意义。configure
在构建GCC之前运行时:
--build
:您正在构建的机器--host
:您要制造的机器--target
:GCC将为其生成二进制文件的机器如果构建,主机和目标都相同,则称为本机。如果构建和主机相同,但目标不同,则称为交叉。如果构建,宿主和目标都不同,则称为加拿大人(出于与加拿大政党和当时从事构建工作的人员的背景打交道的模糊原因)。如果主机和目标相同,但构建方式不同,则使用交叉编译器为其他系统构建本机。有人将此称为“主机x主机”,“交叉本机”或“交叉构建”本机。如果构建和目标相同,但宿主不同,则您将使用交叉编译器来构建交叉编译器,该交叉编译器将为要构建的计算机生成代码。这种情况很少见,因此没有通用的描述方式。有建议将其称为交叉。
--target
与本身不是编译器的任何项目都不相关。那么为什么它是标准的配置选项?令人困惑。
configure
并不是完美和干净设计的顶峰;我想这仅仅是特定于应用程序的功能蔓延的结果。
--host
和,Autotools也会使用错误的工具链进行交叉编译--build
。我有两个C ++项目,由于Autotools非常流行,因此无法为Android构建。它坚持使用主机的工具链运行测试。