通过链接器运行程序时出现错误?

时间:2014-02-23 06:39:13

标签: c linux linker segmentation-fault libc

我下载了libc6的源代码并成功完成了构建过程。 (虽然我没有故意表演make install

使用buil-dir/elf/ld.so内置的新链接器,我运行了一个程序,将其作为新构建的链接器的参数提供。

  • 测试代码打印一些字符串,然后打印malloc(sizeof(char)*1024)

  • 在运行测试二进制文件作为新构建的链接器的参数时,我在Seg Fault获得elf/dl-addr.c:132,即:

    131 /* Protect against concurrent loads and unloads. */

    132 __rtld_lock_lock_recursive (GL(dl_load_lock));

  • 这是seg错误之前的最后一帧,并通过测试程序的malloc()调用来调用。

此时堆栈跟踪:

#0  0x0000000000000000 in ?? ()
#1  0x00007f11a6a94928 in __GI__dl_addr (address=0x7f11a69e67a0 <ptmalloc_init>,   info=0x7fffe9393be0, mapp=0x7fffe9393c00, symbolp=0x0) at dl-addr.c:132
#2  0x00007f11a69e64d7 in ptmalloc_init () at arena.c:381
#3  0x00007f11a69e72b8 in ptmalloc_init () at arena.c:371
#4  malloc_hook_ini (sz=<optimized out>, caller=<optimized out>) at hooks.c:32
#5  0x00000000004005b3 in main () at test.c:20

在机器上使用默认安装的链接器运行相同的程序时,程序运行正常。

  • 我无法理解这背后的问题是什么? (它是错误的,因为我使用新建的链接器而不先安装它)

- 非常感谢任何建议或指示。 感谢

(系统详情GCC 4.8.22, eglibc-2.15 Ubuntu 12.10 64bit

1 个答案:

答案 0 :(得分:1)

  

使用buil-dir/elf/ld.so内置的新链接器,我运行了一个程序,将其作为新构建的链接器的参数提供。

您所做的所有,然后崩溃是预期,因为您正在将新构建的加载程序与系统混合库(不起作用: <{1}} 的所有部分必须来自它的相同版本。)

您需要做的是:

glibc

要搜索的目录列表必须包含程序使用的所有库(glibc的一部分)。