建设一个类似淘宝的网站,教学督导网站建设报告,郑州高端网站定制,如何做增加网站留存的营销活动小编典典您有两种选择#xff0c;获取正确的编译器。编写自己的“ C”库。获取正确的编译器。你是 总是 最安全的有一个编译器匹配您的系统。这适用于x86Linux和各种发行版。如果不同的编译器可以工作#xff0c;您将很幸运。当您交叉编译时#xff0c;这样做会更加困难获取正确的编译器。编写自己的“ C”库。获取正确的编译器。你是 总是 最安全的有一个编译器匹配您的系统。这适用于x86Linux和各种发行版。如果不同的编译器可以工作您将很幸运。当您交叉编译时这样做会更加困难因为编译器通常不会自动同步。尝试在2014Ubuntu系统上编译的1999 x86 Mandrake Linux上运行程序。除了指令兼容性(您已确定)外还存在ABI和OS依赖性。具体来说 armv7 最有可能是 硬 浮点 (具有 浮点FPU和注册调用约定)您需要 软浮点 (模拟的FPU)。特定的 glibc (或 ucLibc )具有Linux操作系统的特定调用和期望。例如线程的 工作方式已经随着时间而改变。自己写您可以随时使用-fno-builtin和-ffreestanding以及-static。然后您将无法使用任何 libc函数但可以自行编程。有外部资源例如MarkMartinec的snprintf和write()易于实现的构建基块#define _SYS_IOCTL_H 1#include #include static inline int write(int fd, void *buf, int len){int rval;asm volatile (mov r0, %1\n\tmov r1, %2\n\tmov r2, %3\n\tmov r7, %4\n\tswi #0\n\tmov %0, r0\n\t: r (rval): r (fd),r (buf),r (len),Ir (__NR_write): r0, r1, r2, r7);return rval;}static inline void exit(int status){asm volatile (mov r0, %0\n\tmov r7, %1\n\tswi #0\n\t: : r (status),Ir (__NR_exit): r0, r7);}您必须添加自己的启动机制由“ C”库负责/* Called from assembler startup. */int main (int argc, char*argv[]){write(STDOUT, Hello world\n, sizeof(Hello world\n));return 0;}/* Wrapper for main return code. */void __attribute__ ((unused)) estart (int argc, char*argv[]){int rval main(argc,argv);exit(rval);}/* Setup arguments for estart [like main()]. */void __attribute__ ((naked)) _start (void){asm( sub lr, lr, lr\n /* Clear the link register. */ ldr r0, [sp]\n /* Get argc... */ add r1, sp, #4\n /* ... and argv ... */ b estart\n /* Lets go! */);}如果这太令人生畏因为您需要实现很多功能那么您可以尝试获取各种库源并使用它们进行重建-fno-builtin并确保这些库不会与不兼容的Ubuntu库链接。诸如crosstool-ng之类的项目可以使您构建完全适合 armv5系统的正确编译器(也许使用更高级的代码生成)。这看起来似乎很痛苦但是上面的替代方法也不容易。2020-06-02