我已经写了一个代码生成器的接口,可以让我生成共享对象。虽然我不想实现对节头表的支持,因为这是ELF文件格式的大部分复杂度仍然存在的地方。我需要链接没有节标头的共享对象上的C程序
GNU ld使用节头来链接共享对象。这意味着当我尝试将gcc链接放在没有节标题的共享对象上时,它会失败,因为即使它们存在于库中,ld也找不到这些符号。
是否存在一些我可以用来欺骗编译器使链接成功的技巧,即使它找不到某些符号?
下面是一些澄清麻烦:
[email protected]:~/Documents/g386$ gcc dev/shared_test.c -L. -lshared -m32
/tmp/cc6qBViY.o: In function `main':
shared_test.c:(.text+0xa): undefined reference to `example_function'
collect2: ld returned 1 exit status
[email protected]:~/Documents/g386$ cat dev/shared_test.c
// gcc shared_test.c -L. -lshared -m32
// LD_LIBRARY_PATH=. ./a.out
#include <stdio.h>
extern int example_function();
int main(){
printf("hello %d\n", example_function());
}
[email protected]:~/Documents/g386$ readelf -D -s libshared.so
Symbol table for image:
Num Buc: Value Size Type Bind Vis Ndx Name
2 0: 00800164 0 FUNC GLOBAL DEFAULT ABS example_function
1 0: 008000ac 0 OBJECT GLOBAL DEFAULT ABS _DYNAMIC
请您澄清一下吗?你有符号表吗?你对“共享对象”的定义是什么? – 2010-01-24 16:06:06
当然。我贴了一个显示一些上下文的粘贴。我希望这已经足够了。 – Cheery 2010-01-24 16:37:10
这似乎是徒劳的练习;您希望为共享对象链接生成代码,而不提供允许动态加载器查找共享对象提供的符号的信息。 ELF的复杂性在各个部分都是正确的,但这些部分对于正确操作至关重要。 – 2010-01-24 18:44:25