将动态链接的可执行文件与ld链接

Mir*_*chi 3 linux linker ld

我正在尝试创建一个没有gcc的动态链接可执行文件(elf_i386).该程序非常简单(只有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
Run Code Online (Sandbox Code Playgroud)

可执行文件被创建,并且文件命令和ldd命令显示正确的输出...但是当我在调用printf后启动程序时我得到了分段错误...我用objdump检查了可执行文件,我认为问题是关于dtors ...似乎编译:

$gcc -o simple simple.c
Run Code Online (Sandbox Code Playgroud)

一个部分.dtors存在,而它不存在于直接用ld创建的可执行文件中:(

有任何想法吗?

Rob*_*obᵩ 7

失去了--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
$ 
Run Code Online (Sandbox Code Playgroud)