以下是关于从源代码编译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将从指定的非标准位置runcurl-config
,并使用其输出来确定要使用的正确libcurl版本。
当系统中仅安装了一个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系统的默认链接选项)。