首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用来自VxWorks RTP的系统符号表

使用来自VxWorks RTP的系统符号表
EN

Stack Overflow用户
提问于 2013-11-06 12:24:56
回答 1查看 4.4K关注 0票数 0

我有一个现有的项目,最初是作为VxWorks5.5风格的内核模块实现的。

此项目创建许多作为“主机”运行外部代码的任务。我们会做这样的事情:

代码语言:javascript
复制
void loadAndRun(char* file, char* function)
{
    //load the module
    int fd = open (file, O_RDONLY,0644);
    loadModule(fdx, LOAD_ALL_SYMBOLS);

    SYM_TYPE type;
    FUNCPTR func;
    symFindByName(sysSymTbl, &function , (char**) &func, &type);

    while (true)
    { 
        func();
    }   
}

这一切都是一个梦想,然而,被调用的函数是不可重入的,全局数据遍布各地等。我们有一个新的要求能够运行这些外部模块的多个实例,我明显的第一个想法是使用vxworks来提供内存隔离。

然而,无论我尝试什么,我都无法说服我的新的RTP项目编译和链接。

代码语言:javascript
复制
error: 'sysSymTbl' undeclared (first use in this function)

如果我添加正确的内容,包括:

代码语言:javascript
复制
#include <sysSymTbl.h>

我得到:

代码语言:javascript
复制
 error: sysSymTbl.h: No such file or directory

如果我给它下定义的话:

代码语言:javascript
复制
 extern SYMTAB_ID    sysSymTbl;

我得到:

代码语言:javascript
复制
  error: undefined reference to `sysSymTbl'

我甚至还没有开始尝试在实际的模块加载代码中进行缝纫,此时我只想让符号查找工作。

那么,系统符号表是否可从VxWorks RTP应用程序访问?可以使用moduleLoad吗?

编辑--看来,我所要做的工作已在关于插件的一节(V6.8的4.9节)中的应用程序程序员指南中进行了介绍(谢谢@),即使用dlopen()等。如下所示:

代码语言:javascript
复制
 void * hdl=  dlopen("pathname",RTLD_NOW);
 FUNCPTR func = dlsym(hdl,"FunctionName");
 func();

然而,即使我指定了编译器的非静态的-Xbind-惰性-非静态,我仍然会在链接器中结束。

代码语言:javascript
复制
undefined reference to `_rtld_dlopen'
undefined reference to `_rtld_dlsym'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-29 11:55:39

这里的问题是,文档中说要指定-Xbind-惰性和-非静态作为编译器选项。但是,实际上应该将它们添加到链接器选项中。

对于适当的构建目标,libc.so.1需要在目标上满足运行时链接要求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19812080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档