解决syslog-ng: symbol lookup error: /usr/lib/libsyslog-ng.so.0: undefined symbol: g_malloc_n

问题:

sudo /etc/init.d/syslog-ng start
syslog-ng: symbol lookup error: /usr/lib/libsyslog-ng.so.0: undefined symbol: g_malloc_n
* Configuration error. Please fix your configfile (/etc/syslog-ng/syslog-ng.conf) [ !! ]
* ERROR: syslog-ng failed to start

解决方法:symbol lookup error一般是由于错误的库引起的,像引用了过时的库,g_malloc_n是在libglib库中定义的,因此移除比较老的glib库即可

ldd /usr/lib/libsyslog-ng.so.0
linux-gate.so.1 => (0xffffe000)
libgmodule-2.0.so.0 => /usr/local/lib/libgmodule-2.0.so.0 (0xb770c000)
libglib-2.0.so.0 => /usr/local/lib/libglib-2.0.so.0 (0xb7688000)
libevtlog.so.0 => /usr/lib/libevtlog.so.0 (0xb7683000)
libcap.so.2 => /lib/libcap.so.2 (0xb767e000)
libpcre.so.0 => /opt/aurora/lib/libpcre.so.0 (0xb765e000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7645000)
libc.so.6 => /lib/libc.so.6 (0xb74eb000)
libdl.so.2 => /lib/libdl.so.2 (0xb74e7000)
libattr.so.1 => /lib/libattr.so.1 (0xb74e1000)
/lib/ld-linux.so.2 (0xb7777000)

使用ldd命令

使用nm显示库中定义的符号

readelf -d smbapp.so 会显示直接依赖的库

移动替换库后得sudo ldconfig

ldd -d -r 会显示未定义的符号

特别注意库的加载路径,当前目录和标准目录,

你可能感兴趣的:(lookup,undefined,symbol,error:,syslog-ng:,symbol:,g_malloc_n)