问题不在于您的应用程序和动态库是否是使用不同版本的 clang 和/或 gcc 编译的。问题是最终是否有一个底层 C 库可以操作一种 FILE * 对象并拥有一个兼容的fclose().
至少在 MacOS 和 Linux 下,所有这些问题的答案可能都是“是”。根据我的经验,很难将两个不同的、不兼容的 C 库混合在一起;你必须真正努力。
附录:不过,我想我应该承认我的经验可能已经过时了。根据我的经验,在任何类 Unix 系统上,都只有一个 C 库,通常是/lib/libc.{a,so}. 但我认为“现代”编译器倾向于在特殊位置访问自己的编译器和版本特定的库,这意味着您担心的情况可能会成为问题。在我看来,这种方式是疯狂的,但话又说回来,似乎世界上越来越多的人似乎正在拥抱依赖地狱,而不是试图消除它。