Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.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
Linux GCC:buildroot GCC和预编译GCC(与APT一起安装)之间的区别?_Linux_Gcc_Kernel_Libc_Buildroot - Fatal编程技术网

Linux GCC:buildroot GCC和预编译GCC(与APT一起安装)之间的区别?

Linux GCC:buildroot GCC和预编译GCC(与APT一起安装)之间的区别?,linux,gcc,kernel,libc,buildroot,Linux,Gcc,Kernel,Libc,Buildroot,我正在尝试为x86系统的initrd定制二进制文件。我采用了通用的预编译Debian7GCC版本4.7.2-5,并用它编译了内核。下一步是在initrd中生成helloworld程序而不是init脚本,以检查我的开发进度。Helloworld程序也使用该gcc编译。当我尝试启动自定义系统时,内核启动没有问题,但helloworld程序遇到了一些错误: kernel: init[24879] general protection ip:7fd7271585e0 sp:7fff1ef55070 er

我正在尝试为x86系统的initrd定制二进制文件。我采用了通用的预编译Debian7GCC版本4.7.2-5,并用它编译了内核。下一步是在initrd中生成helloworld程序而不是init脚本,以检查我的开发进度。Helloworld程序也使用该gcc编译。当我尝试启动自定义系统时,内核启动没有问题,但helloworld程序遇到了一些错误:

kernel: init[24879] general protection ip:7fd7271585e0 sp:7fff1ef55070 error:0 in init[7fd727142000+20000]
数字不是我的,我从谷歌得到了类似的字符串。Helloworld计划:

#include <stdio.h>
int main(){
    printf("Helloworld\r\n");
    sleep(9999999);
    return 0;
}
早些时候,我在ARM系统上也遇到了同样的问题,使用通用编译器编译内核和一些二进制文件,并尝试运行,内核运行,但二进制-不是。用完整的buildroot系统解决了这个问题,并在下一个项目中使用了buildroot编译器

所以我的问题是:作为buildroot的一部分编译的gcc和一般预编译的gcc有什么区别? 我知道buildroot编译器是分几个步骤完成的,有不同的libs等等,这是主要的区别吗,平台独立性

我不需要解决方案,我随时都可以找到。我想知道我的问题的根源,以避免将来出现这样的问题。谢谢

UPD:用while1代替睡眠;同样的情况。我的内核输出:

init[1]: general protection ip: 8053682 sp: bf978294 error: 0 in init[8048000+81000]
printk: 14300820 message suppressed.
每秒钟重复一次

UPD2:我添加了vdso32-int80.so原始名称,就像在内核树中一样,经过测试-没有运气。 我添加了ld-linux.so 2文件:ld-2.13.so,带有符号链接,已测试-相同错误。 Busybox way允许运行二进制文件,而不需要任何库,这是我在ARM平台上测试的。
感谢您尝试帮助我,还有其他想法吗?

更改您的程序,主要用于a;;循环并查看发生了什么。您的initrd是否包含所有必需的共享库?特别是,与-static链接的可执行文件仍然需要linux-vdso.so,它实际上是内核的一部分,ld-linux.so应该在/lib或/lib64.BTW中。同样的helloworld可执行文件在从shell而不是从init启动时是否正常工作?Arnout,请检查编辑。
init[1]: general protection ip: 8053682 sp: bf978294 error: 0 in init[8048000+81000]
printk: 14300820 message suppressed.