gpt4 book ai didi

c - 在可下载内核模块中调用代码时 undefined reference

转载 作者:太空宇宙 更新时间:2023-11-04 03:52:06 26 4
gpt4 key购买 nike

接上一个问题 Using system symbol table from VxWorks RTP .

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

但是,我无法构建我的 RTP,从链接器收到有关 undefined reference 的错误。

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

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

void writeDatabaseValue(int , char*);

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

void main (int)
{
//do some stuff
writeDatabaseValue(0,"foo"); //Linker error here
taskDelay(100); //but no linker error here
}

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

编辑:为了额外的复杂性,我想调用的一些内核模块代码在实际生成我的 RTP 的同一个模块中……

最佳答案

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

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

或者创建基于 DKM 的动态库(再次使用符号链接(symbolic link))并将它们链接到您的 RTP。

例如,假设您有以下工作台工作区:DKM1DKM2转运费

根据问题,您正尝试在 RTP 中链接 DKM1 和 2 的目标文件,但遇到了问题。

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

在 RTP 项目中,执行“新建 > 目录”。选择“高级”按钮并选中“现有目录的链接”,然后选择“DKM1”目录。DKM1 中的所有源文件现在都将成为 RTP 的一部分。对 DKM2 做同样的事情。

当您编译 RTP 项目时,这些新文件也应该被编译。

关于c - 在可下载内核模块中调用代码时 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19859662/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com