C 使用在不同文件中定义的回调函数会给出;“未定义引用”;
我正在尝试使用回调函数。当调用方和被调用函数位于同一个文件中时,这种方法工作得很好。我最近决定让被调用的函数成为库的一部分,因此我在头文件中声明了它,并在它自己的文件中定义。我#在调用源文件中包含新头,链接到新库,现在我得到了回调函数的“Undefined reference”错误 有什么特别的事情我必须做,使这项工作?我注意到,例如,当我在pthread库中使用相同的东西时,回调函数被定义为指针函数C 使用在不同文件中定义的回调函数会给出;“未定义引用”;,c,callback,C,Callback,我正在尝试使用回调函数。当调用方和被调用函数位于同一个文件中时,这种方法工作得很好。我最近决定让被调用的函数成为库的一部分,因此我在头文件中声明了它,并在它自己的文件中定义。我#在调用源文件中包含新头,链接到新库,现在我得到了回调函数的“Undefined reference”错误 有什么特别的事情我必须做,使这项工作?我注意到,例如,当我在pthread库中使用相同的东西时,回调函数被定义为指针函数 编辑:我正在链接到库,我可以调用库中的其他函数 您需要链接到实现回调的实际代码,包括头是不够的
编辑:我正在链接到库,我可以调用库中的其他函数 您需要链接到实现回调的实际代码,包括头是不够的 因此,听起来您的应用程序需要链接到库,当然,为了调用库中的函数,它已经在这样做了。可能的问题:
make
(错误的makefile?)。修复makefile和/或删除对象和库文件将解决此问题extern“C”{}
可能会有所帮助
static
,因此它在链接时在其他模块(.c文件)中不可见。删除static
会有所帮助原来问题是我的头中有两次定义,一次有静态,一次没有。我正在链接包含回调的库。回调是否可能声明为
static
?否,如果要从外部调用,它不能是static
。如果声明为静态
,它将不可见,也不会导出任何符号。那么,nmyourlib | grep callback_name
是否给出了任何提示?我不知道该函数存在。我在包含回调函数的库中运行了它,回调函数出现了。这很奇怪-虽然它与它是一个回调参数这一事实有关,但我只是将回调函数改为库中的另一个函数,它编译得很好-它只是实际的回调函数,导致problemEdited问题包括我正在链接的问题。我可以调用库中的其他函数。