0

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

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

这是带有 -lpthread 的 objdump 输出

00000000      DF *UND*  00000aa5  GLIBC_2.1   pthread_create

这是带有 -pthread 的 objdump 输出

00000000      D  *UND*  00000000              pthread_create
4

1 回答 1

1

它还没有搬迁。

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

此处此处有关搬迁的更多信息和链接。

于 2012-06-21T19:44:10.480 回答