【问题标题】:Linux/gcc: null address "00000000" with pthread compiler optionLinux/gcc:带有 pthread 编译器选项的空地址“00000000”
【发布时间】:2012-06-21 14:52:02
【问题描述】:

我用 pthreads 编译了一个共享库。为什么我使用 pthread 选项编译时地址是“00000000”?这意味着什么 ? pthread_create 是嵌入到二进制文件中的吗?

(无论如何,这两种方法都按预期工作)

这是使用 -lpthread 的 objdump 输出

00000000      DF *UND*  00000aa5  GLIBC_2.1   pthread_create

这是使用 -pthread 的 objdump 输出

00000000      D  *UND*  00000000              pthread_create

【问题讨论】:

  • @m0skit0 ,有什么优点或缺点吗? .无论如何,最终的二进制文件有效。

标签: c linux gcc pthreads


【解决方案1】:

它还没有搬迁。

现代操作系统上的可执行文件通常使用偏移量而不是直接地址。这样,您可以在任何地址加载可执行文件,但您需要为此处理所有偏移量。每种可执行格式都有一些特殊的部分指出要重定位的内容和方式(例如 ELF 格式的 .reloc)。

更多关于搬迁的信息和链接herehere

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2015-06-14
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多