我正在关注一个网站(http://wiki.osdev.org/GCC_Cross-Compiler),以了解如何交叉编译不同体系结构的代码.因此,第一步是为特定目标下载和编译Binutils.
该网站称使用i686-elf分配变量TARGET,因为binutils将能够以$ TARGET指定的格式处理代码.
export PREFIX="$HOME/opt/cross"
export TARGET=i686-elf
export PATH="$PREFIX/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是
我可以获得Binutils支持的目标列表吗?
如果变量TARGET可以包含任何东西,或者必须是Binutils支持的东西,即在编译binutils的源代码时是否会出错,如果TARGET是binutils不理解的东西?
从来没有看到这个问题的答案,所以我会给来自不同搜索引擎的人进行大学尝试。如果从源软件下载或克隆 binutils
git clone git://sourceware.org/git/binutils-gdb.git
Run Code Online (Sandbox Code Playgroud)
然后阅读 binutils 的解释
https://sourceware.org/binutils/binutils-porting-guide.txt
Run Code Online (Sandbox Code Playgroud)
你会找到答案的。
长话短说
读取bfd目录下config.bfd的内容
所有支持的目标都列在
cd /path/to/git/clone/of/binutils/bfd
Run Code Online (Sandbox Code Playgroud)
请注意上述目录中带有elf32-[SOME_NAME].c和elf64-[SOME_NAME].c的文件,这些是您支持的目标。
前任
elf32-cr16.c
Run Code Online (Sandbox Code Playgroud)
会翻译成,
--target=cr16-elf
Run Code Online (Sandbox Code Playgroud)