Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Usb 如何指导链接器考虑静态库中存在的强IRQ定义,而不是弱定义_Usb - Fatal编程技术网

Usb 如何指导链接器考虑静态库中存在的强IRQ定义,而不是弱定义

Usb 如何指导链接器考虑静态库中存在的强IRQ定义,而不是弱定义,usb,Usb,我们在链接强USB_IRQ处理程序时遇到问题 我们在静态库中提供了真正的USB IRQ定义。 我们正在用处理程序名称填充应用程序启动文件(*.s)中的.vector表,并且在同一启动文件中定义了_弱定义 链接时,我们看到链接器总是选择启动文件中的弱IRQ定义,而不是库(*.a)中的强IRQ定义 如果我们从启动文件中删除弱定义,则会考虑强定义,并且效果良好 我们看到的问题是,包含强定义的库文件没有以任何方式从我们的应用程序中引用,这意味着,我们没有使用该文件中存在的任何函数或结构。仅使用IRQ处理

我们在链接强USB_IRQ处理程序时遇到问题

我们在静态库中提供了真正的USB IRQ定义。
我们正在用处理程序名称填充应用程序启动文件(*.s)中的.vector表,并且在同一启动文件中定义了_弱定义

链接时,我们看到链接器总是选择启动文件中的弱IRQ定义,而不是库(*.a)中的强IRQ定义

如果我们从启动文件中删除弱定义,则会考虑强定义,并且效果良好

我们看到的问题是,包含强定义的库文件没有以任何方式从我们的应用程序中引用,这意味着,我们没有使用该文件中存在的任何函数或结构。仅使用IRQ处理程序,并且只有在发生硬件事件时才会触发IRQ处理程序

我们使用ARM GNU工具链,尝试了多种选项,但没有任何帮助。
我们查看了internet帮助,发现很少有选项像,-no_remove和--keep linker选项,但是,这些标志似乎不受支持


请建议您在这方面是否有一些输入。

我认为您需要确保从您的程序中引用与强定义相同的源文件中至少有一个符号。否则,链接器将没有理由加载包含IRQ的对象文件。例如,您可以在源文件中定义一些init函数,并从程序中调用它


确保IRQ函数也是用
\uuuuuu属性(已使用))
声明的。

谢谢您的回复。具有强定义的文件是我们的第三方来源。我们将无法合法地修改源代码,并且我们也将无法在IRQ函数的声明中添加_属性_((已使用))。是否有可能在汇编过程中实施这样的规则?要么是IRQ函数声明,要么是完整对象?嗯,我不知道,这是一个明显不同的问题。如果是专有的第三方软件,他们应该为您提供一些支持。你有源代码吗?是否可以只将对象文件(
*.o
)作为链接器的参数,而不是将其存储在
.a
文件中?你能摆脱项目中的弱定义吗?