分类: LINUX
2015-12-11 15:34:11
Quote: |
$ file hello.s |
Quote: |
$ gcc -c myprintf.c test.c #编译产生两个目标文件myprintf.o和test.o,它们都是可重定位文件(REL) |
Quote: |
$ gcc -c myprintf.c #默认编译好myprintf.c,将产生一个可重定位的文件myprintf.o |
Quote: |
$ gcc -S myprintf.c |
Quote: |
$ readelf -S test.o #为了比较,先把test.o的节区表也列出 |
Quote: |
$ gcc -v -o test test.o myprintf.o #把可重定位文件链接成可执行文件 |
Quote: |
$ ld --eh-frame-hdr \ |
Quote: |
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o test /usr/lib/crt1.o /usr/lib/crti.o test.o myprintf.o -L/usr/lib -lc /usr/lib/crtn.o #后面发现不用链接libgcc,也不用--eh-frame-hdr参数 |
Quote: |
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o test /usr/lib/crt1.o test.o myprintf.o -L/usr/lib/ -lc |
Quote: |
$ readelf -s /usr/lib/crt1.o | grep __libc_csu_init |
Quote: |
$ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o test test.o myprintf.o -L/usr/lib/ -lc |
Quote: |
$ ./test |
Quote: |
$ gcc -g -c test.c myprintf.c #产生目标代码, 非交叉编译,不指定-m也可以链接成功,所以下面可以去掉-m参数 |
Quote: |
$ ld --verbose | grep ^ENTRY #非交叉编译,可不用-m参数;ld默认找_start入口,并不是main哦! |
Quote: |
$ cat test.c |
Quote: |
$ ld --verbose | grep PROVIDE | grep -v HIDDEN |