我正在尝试使用回调函数。当调用者和被调用函数在同一个文件中时,这工作得很好。我最近决定将被调用函数作为库的一部分,所以我将它声明在一个头文件中,并在它自己的文件中定义。我在调用源文件中#include 新标头,链接到新库,现在我收到回调函数的“未定义引用”错误。
我需要做一些特别的事情来完成这项工作吗?例如,当我在 pthread 库中使用相同的东西时,我注意到回调函数被定义为指针函数。
编辑:我正在链接到库,我可以很好地调用库中的其他函数。
可能出现的问题:
函数的定义(在 .c 文件中)与其声明(在 .h 文件中)不一致,并且使用此函数的代码基本上告诉链接器去查找头文件中的内容,而不是实际在头文件中的内容图书馆。
您忘记编译实现该函数的文件或将生成的目标文件放入库中,因此链接器无法在库中找到该函数。
您有一些源文件已打开且未保存,虽然它们在编辑器中看起来很好且完整,但它们的磁盘内容不同,并且在您尝试编译代码时出现了问题。
你有一些问题make
(坏的makefile?)使它认为实现该功能的文件不需要编译,或者它已经编译并且不需要重新编译。修复 makefile 和/或删除对象和库文件将解决问题。
您混合了 C 和 C++ 代码,并且由于 C++ 名称修改而遇到问题。在这里使用extern "C" { }
可能会有所帮助。
您已将该函数定义为static
,因此它在链接时在其他模块(.c 文件)中是不可见的。删除static
会有所帮助。
原来问题是我的标题有两次定义,一次是静态的,一次是没有的。
您需要链接到实现回调的实际代码,包括标头是不够的。
因此,听起来您的应用程序需要链接到库,它当然应该这样做才能调用库中的函数。