我虚拟机里的Linux是自己DIY的,为了在里面编译一个Hello world,我把一个已经装有gcc的系统里的gcc命令、库 复制(主要复制了/usr/include 和 usr/lib 里面的文件)到虚拟机里的相应目录(我从复制gcc和ld程序开始,利用ldd和提示 把依赖的库一点一点复制到虚拟机里)直到可以利用gcc正常编译Hello world。
但是发现在虚拟机里利用
gcc main.c
编译出来的程序会产生Segmentation fault:
但是静态链接hello world可以正常运行:
gcc -static main.c
另外,执行:
ld -nostdlib -o hello -dynamic-linker /lib/ld-linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o main.o -L /usr/lib/ -lc /usr/lib/crtn.o
可以在装有gcc的系统里面生成可运行的程序,但在DIY的Linux里则会提示类似以下的错误:
。。。
/lib//libc.a(fseek.o): In function `fseek':
(.text+0xde): undefined reference to `_Unwind_Resume'
/lib//libc.a(fseek.o):(.eh_frame+0xdf): undefined reference to `__gcc_personality_v0'
/lib//libc.a(ftello.o): In function `ftello':
(.text+0x194): undefined reference to `_Unwind_Resume'
/lib//libc.a(ftello.o):(.eh_frame+0xdf): undefined reference to `__gcc_personality_v0'
。。。
请问为什么这种情况下 gcc 非静态链接产生段错误,还有以上的错误能不能看出需要再链接什么库?