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

时间:2011-04-28 15:38:53

标签: 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

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

$gcc -o simple simple.c

部分.dtors存在,但它不存在于使用ld :(

)直接创建的可执行文件中

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

失去--entry mainmain不是您的切入点,_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
$ 

答案 1 :(得分:2)

除非您使用C中的return,否则我无需包含main()运行时环境。

我们可以剥离CRT并使用以下链接:

ld -o hello -lc -dynamic-linker /lib/ld-linux.so.2 hello.o -e main

会工作。