首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用可下载内核模块中的代码时引用未定义

调用可下载内核模块中的代码时引用未定义
EN

Stack Overflow用户
提问于 2013-11-08 20:56:09
回答 1查看 940关注 0票数 2

从上一个问题Using system symbol table from VxWorks RTP开始。

我正在将现有的vxworks内核模块移植到RTP,然而,大部分实际功能仍然嵌入在其他“可下载”的内核模块中。它们是使用loadModule加载的(作为启动过程的一部分),因此应该在我的RTP运行点的系统符号表中。]

但是,我无法构建我的RTP,因为我从链接器中得到了关于未定义引用的错误。

如何说服链接器忽略对这些函数的引用?我正在将-Xbind-lazy -non-static选项传递给链接器。

例如,内核模块(构建为database.out)可能包含如下代码

void writeDatabaseValue(int , char*);

并且我的RTP应用程序代码以通常的方式调用它

代码语言:javascript
复制
void main (int)
{
     //do some stuff
     writeDatabaseValue(0,"foo");  //Linker error here
     taskDelay(100);  //but no linker error here
}

我曾尝试使用-l:database.outdatabase.out添加到链接行,它解析了对writeDatabaseValue的引用,但是我随后陷入了依赖地狱,因为链接器随后会尝试解析所有database.out的引用,包括所有标准的vxworks api调用。

编辑:只是为了更复杂,我想调用的一些内核模块代码与实际产生我的RTP的模块位于同一个模块中……

EN

回答 1

Stack Overflow用户

发布于 2013-11-09 03:37:06

您实际上是在试图将一个环境硬塞到一个完全不同的环境中,并且正在经历这种方法所固有的痛苦。我不相信你能让链接器忽略引用。

使用符号链接(在Workbench环境中可用)到源文件并在RTP项目中使用它们可能会更好。

或者基于DKMs创建动态库(同样,使用符号链接),并将它们链接到您的RTP。

例如,假设您有以下工作台工作区: DKM1 DKM2 RTP

基于这个问题,您正在尝试在RTP中链接DKM1 &2的目标文件,并且正在经历痛苦。

一种更好的方法是在DKM1 & DKM2中将项目链接添加到源文件,并在RTP中对其进行编译。因为它是一个链接(而不是副本),所以在DKM中更改文件(例如,为了修复bug )也会在RTP中更改它。

在RTP项目中,执行"New > Directory“。选择“高级”按钮并选中“链接到现有目录”,然后选择"DKM1“目录。DKM1中的所有源文件现在都将成为RTP的一部分。对DKM2执行相同的操作。

编译RTP项目时,还应编译这些新文件。

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

https://stackoverflow.com/questions/19859662

复制
相关文章

相似问题

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