我想用.interp段编译一个共享库。

#include <stdio.h>

int foo(int argc, char** argv) {

    printf("Hello, world!\n");
    return 0;

}

我正在使用以下命令。
gcc -c -o test.o test.c
ld --dynamic-linker=blah -shared -o test.so test.o

我最终没有INTERP段,就好像我从未通过--dynamic-linker=blah选项一样。检查readelf -l test.so。生成可执行文件时,链接程序会正确处理该选项,并将INTERP段放在程序头中。如何使它也适用于共享库?

最佳答案

如果使用ld,则-shared不包含.interp节,如@MichaelDillon所述。但是,您可以自己提供此部分。

const char interp_section[] __attribute__((section(".interp"))) = "/path/to/dynamic/linker";

上面的行将使用GCC attributes将字符串“/path/to/dynamic/linker”保存在.interp节中。

如果您要构建一个共享对象,该共享对象本身也可以执行,请 checkout this question。它对过程进行了更全面的描述。

10-01 02:40