编译一个测试hello world C程序,将-march设置为不同的值,生成相同的可执行文件,例如:
$ mipsel-linux-gnu-gcc-10 -march=mips32 -static -EL /tmp/test.c -o /tmp/test_mips32
$ mipsel-linux-gnu-gcc-10 -march=mips32r2 -static -EL /tmp/test.c -o /tmp/test_mips32r2
$ mipsel-linux-gnu-gcc-10 -march=24kc -static -EL /tmp/test.c -o /tmp/test_24kc
结果是
$ file /tmp/test_mips32
/tmp/test_mips32: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), statically linked, BuildID[sha1]=92738788137ab5f60695febf78213eb7961ef4bd, for GNU/Linux 3.2.0, not stripped
$ file /tmp/test_mips32r2
/tmp/test_mips32r2: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), statically linked, BuildID[sha1]=92738788137ab5f60695febf78213eb7961ef4bd, for GNU/Linux 3.2.0, not stripped
$ file /tmp/test_24kc
/tmp/test_24kc: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), statically linked, BuildID[sha1]=92738788137ab5f60695febf78213eb7961ef4bd, for GNU/Linux 3.2.0, not stripped
我还验证了文件的字节是否相同。
我错过了什么?
1条答案
按热度按时间8zzbczxx1#
没有实际的源代码,这很难说,但答案可能只是编译器没有理由在您的情况下做出不同的选择。
请记住,所有提到的行军旗共享一个公共的MIPS内核,所以生成适用于这三个内核的代码并非不可能,也许该代码对您的情况是最佳的?