1 编译 问题

以下是关于从源代码编译Zabbix的已知问题. 其他所有情况请参阅Known issues页面.

在 HP-UX 上编译 Zabbix agent

如果从流行的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将从指定的非标准位置runcurl-config,并使用其输出来确定要使用的正确libcurl版本。

$ ./configure --enable-server --with-mysql --with-libcurl=/usr/local/bin/curl-config

当系统中仅安装了一个libcurl时此方法有效,但如果标准位置(例如通过包管理器安装)还存在另一个libcurl时可能失效。这种情况常见于您需要为Zabbix使用较新的version库版本,而其他应用程序仍需使用旧版本。

因此,当标准位置已存在相同组件时,指定非标准位置的组件并不总能生效。

例如,若您使用安装在/usr/local的新版libcurl,而系统中仍存在libcurl软件包,Zabbix可能会错误选择版本导致编译失败:

usr/bin/ld: ../../src/libs/zbxhttp/libzbxhttp.a(http.o): in function 'zbx_http_convert_to_utf8':
       /tmp/zabbix-master/src/libs/zbxhttp/http.c:957: undefined reference to 'curl_easy_header'
       collect2: error: ld returned 1 exit status

此处函数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系统的默认链接选项)。