在我的 PHP 扩展中使用 C++ 库:未定义的符号:mpfr_get_emin_min

Using a c++ library in my PHP Extension: undefined symbol: mpfr_get_emin_min

尝试使用 mpfr.so 库为 PHP 编译我自己的 MPFR 模块。我的扩展程序本身有一个简单的 ping 功能,它只是 returns “pong” 来验证扩展程序是否实际加载,还有另一个功能,returns 以下内容:

return ("MPFR library: %-12s\nMPFR header:  %s (based on %d.%d.%d)\n",
            mpfr_get_version(), MPFR_VERSION_STRING, MPFR_VERSION_MAJOR,
            MPFR_VERSION_MINOR, MPFR_VERSION_PATCHLEVEL);

这应该打印当前的 mpfr 库版本。当我编译 php 扩展时,编译过程没有错误。我将输出的so文件复制到PHP模块的进程中,在调用我的php脚本后,它实际上是undefined symbol: mpfr_get_emin_min

所以我首先想到,库输出可能不知道任何 lib mpfr,所以我在最后添加了编译器标志 -lmpfr -lgmp,但不知何故它什么也没做。

文件本身只是使用 <mpfr.h>,我认为它在扩展名中是正确的并且可用。

您的分机不知道该功能。您必须将 mpfr 库包含到您的扩展中,这样它就会被编译/加载到其中。