我想用.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。它对过程进行了更全面的描述。