C++ 调用的函数指针无效

C++ 调用的函数指针无效,c++,emscripten,C++,Emscripten,我使用了一个外部库(HarfBuzz),它使用“调用的函数指针无效”中止 这是由以下代码引起的(降至绝对最小值): 目前,我通过将\u do\u nothing函数更改为: void doNothing(void *) { } 由于它位于外部库中,我不想更改源代码。我想知道是否有机会“教”emscripten处理这个案子。你肯定不想让emscripten“处理这个案子”。通过指向不兼容类型函数的指针调用函数是未定义的行为(Emscripten可以可靠地报告它,因为它根据函数指针的类型将函数指针

我使用了一个外部库(HarfBuzz),它使用“调用的函数指针无效”中止

这是由以下代码引起的(降至绝对最小值):

目前,我通过将
\u do\u nothing
函数更改为:

void doNothing(void *) { }

由于它位于外部库中,我不想更改源代码。我想知道是否有机会“教”
emscripten处理这个案子。

你肯定不想让emscripten“处理这个案子”。通过指向不兼容类型函数的指针调用函数是未定义的行为(Emscripten可以可靠地报告它,因为它根据函数指针的类型将函数指针存储在单独的表中)


您只需提交一个bug,并要求库的开发人员在其代码中修复它。

这完全属于未定义的行为领域:对于转换到不同函数类型的函数指针的结果,您可以安全地做的唯一一件事就是将其转换回原始类型。此外,无法检查函数指针并找出其原始类型,甚至无法确定其当前类型是否与原始类型匹配。(包括函数指针和额外类型信息的数据结构可能会有所帮助)


一些平台可能提供更强的保障;依靠它是不可移植的。更多的平台可以让它在实践中发挥作用;在未来的编译器升级过程中,依赖这一点可能会导致中断,因为在存在未定义行为的情况下,它们可以更有效地进行优化。

代码的哪些部分是库的一部分?如果库是这样做的,那就是库中的错误。报告它。@anorm我从以下文本中猜测:
void\u dou\u nothing(void){}
有用的经验法则:当你抛出函数指针时,你引入了一个bug。@anorm整个代码来自库,我只是减少了它。
void doNothing(void *) { }