如何将so库中的自定义段在ld文件中定位
各位大神,小弟遇到一个问题,想请教一下:
参考文章:https://my.oschina.net/u/180497/blog/177206
我有一个so库,库中有两个函数:
static void func_a(void)
{......}
static void func_b(void)
{......}
声明了自定义段的起始和结束symbol:
extern myown_call _myown_start;
extern myown_call _myown_end;
声明了一个自定义段:
typedef void (*myown_call)(void);
#define _init __attribute__((section(".myown")))
#define func_init(func) myown_call _fn_##func _init = func
func_init(mspec1);
func_init(mspec2);
func_init(mspec3);
在so库内,使用函数执行:
void do_test(void)
{
myown_call *call_ptr = &_myown_start;
do {
(*call_ptr)();
++call_ptr;
} while (call_ptr < &_myown_end);
}
现在的问题是,我需要在另一个程序里,调用do_test,
但是现在发现,另一个程序的elf文件中:
_myown_start和_myown_end的值相同,三个函数指针 _fn_func_a/b/c没有被定位到.myown段内,.myown段是空的。
但是objdump -T 这个so, _fn_func_a/b/c已经被导出。
不知道该如何解决?
ld文件中写得如下:
_myown_start = .;
.myown : { *(.myown) } = 0x90000000
_myown_end = .;
非常感谢:)