以下是有关从源代码编译 Zabbix 的已知 问题。有关所有其他情况,请参阅 Known issues 页面。
如果您从流行的 HP-UX 软件包站点 http://hpux.connect.org.uk 安装 PCRE 库 (例如,从 file pcre-8.42-ia64_64-11.31.depot
安装),则库的 64-位 version 将被安装在 /usr/local/lib/hpux64
目录中。
在这种情况下,为了成功编译 agent,需要为 configure
脚本自定义一个选项,例如:
CFLAGS="+DD64" ./configure --enable-agent --with-libpcre-include=/usr/local/include --with-libpcre-lib=/usr/local/lib/hpux64
Zabbix 允许您指定一个位于非标准位置的库。在下面的示例中,Zabbix 将从指定的非标准位置加载 run curl-config
并使用其输出来确定要使用的正确 libcurl。
如果这是系统中安装的唯一 libcurl,则此方法有效,但如果在标准位置(例如,由软件包管理器)安装了另一个 libcurl,则可能无效。当你需要为 Zabbix 使用较新的库版本 version,而其他应用程序需要旧版本时,就会出现这种情况。
因此,当同一组件也存在于标准位置时,在非标准位置指定该组件并不总是有效。
例如,如果你在仍安装有 libcurl 包的情况下使用安装在 /usr/local
中的较新 libcurl,Zabbix 可能会加载错误的库,从而导致编译失败:
usr/bin/ld: ../../src/libs/zbxhttp/libzbxhttp.a(http.o): 在函数 'zbx_http_convert_to_utf8' 中:
/tmp/zabbix-master/src/libs/zbxhttp/http.c:957: 对 'curl_easy_header' 的未定义引用
collect2: 错误:ld 返回了 1 退出状态
此处,函数 curl_easy_header()
在较旧的 /usr/lib/x86_64-linux-gnu/libcurl.so
中不可用,但在较新的 /usr/local/lib/libcurl.so
中可用。
问题出在链接器标志的顺序上,一个解决方案是在 LDFLAGS 变量中指定库的完整路径:
$ LDFLAGS="-Wl,--no-as-needed /usr/local/lib/libcurl.so" ./configure --enable-server --with-mysql --with-libcurl=/usr/local/bin/curl-config
注意 -Wl,--no-as-needed
选项,某些系统上可能需要该选项(另请参阅:Debian-based 系统上的默认链接选项)。
如果由于堆栈溢出导致 Zabbix 崩溃或冻结,您可以在 configuring the sources 时使用 --with-stacksize
选项来增加每个线程的堆栈大小。
此 问题 可能在默认线程堆栈限制较低的系统上发生,尤其是在 preprocessing 期间创建多个线程时。
以下示例将每个线程的堆栈大小设置为 512 KB:
在基于 Linux 的系统上,您可以使用 ulimit -s
命令在运行时检查系统的线程堆栈限制。