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