我试图创build一个dynamic链接的可执行文件(elf_i386)没有gcc。 该程序是非常简单的(只有一个printf)…在这里的命令:
$ gcc -c simple.c $ ld -o simple -dynamic-linker /lib/ld-linux.so.2 --entry main /usr/lib/crt1.o /usr/lib/crti.o simple.o -lc /usr/lib/crtn.o
可执行文件创build,也是文件命令和ldd命令显示正确的输出…但是,当我启动程序后调用printf我得到一个分段错误…我已经用objdump检查可执行文件,我认为这个问题是关于dtors …似乎编译与:
$gcc -o simple simple.c
一节.dtors是存在的,而它不存在于用ld直接创build的可执行文件中:(
有任何想法吗?
失去 – --entry main
。 main
不是你的切入点, _start
是。 尝试这个:
$ gcc -c hello.c $ ld -o hello -dynamic-linker /lib/ld-linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o hello.o -lc /usr/lib/crtn.o $ ./hello hello, world $
除非您使用main()
return
,否则不需要包含C
运行时环境。
我们可以剥离CRT,并使用以下链接:
ld -o hello -lc -dynamic-linker /lib/ld-linux.so.2 hello.o -e main
将工作。