如何将so库中的自定义段在ld文件中定位

cjn_xaut 2018-03-06 10:30:33
各位大神,小弟遇到一个问题,想请教一下:

参考文章: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 = .;

非常感谢:)
...全文
350 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjn_xaut 2018-03-06
  • 打赏
  • 举报
回复
问题已经知道,对SO库的理解有问题,动态链接库在编译时已经完成了链接,因此需要在SO生成时,就加入ld文件,将其中的myown_start和myown_end两个symbol的值确定下来。

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧