Exim不会启动 – 加载查找模块mysql.so时出错

我不得不在服务器上更改MySQL的root密码。 Exim也为用户使用MySQL

我不认为Exim / Dovecot使用这个密码,但是现在情况并不好,我确信他们是相关的。

当我尝试启动Exim时:

Starting exim: Error loading mysql.so: /usr/lib64/exim/4.72-6.6.amzn1/lookups/mysql.so: undefined symbol: mysql_servers 2014-09-13 19:13:22 Error loading lookup module mysql.so: NULL 

运行服务--status-all了我

 exim dead but subsys locked 

我在/ etc /中检查/ eximdisable,没有任何内容。

磁盘空间使用率为85%,文件使用率为7%。

我最近看到这个。 我在基于CentOS 6的Amazon EC2服务器上为朋友构build了一些Exim 4.84 rpms(你不会说你运行的是哪个版本的Amazon服务器)。 我不得不重新configurationspec文件来编译并直接将mysql模块链接到Exim二进制文件中,而不是使其成为可加载的模块。 我不知道为什么这个全局variables对Amazon服务器上的mysql可加载模块是不可见的,因为它在我以前构build的Exim上的每个其他体系结构上都可见。

我的第一个预感是它与gcc版本有关,以及它如何处理优化标志。 但是没有任何证据或事实支持,这只是一个预感。

Exim无法加载mysql.so因为它没有build立。 你必须确保你至less安装了mysql-client

事实certificate,这与海湾合作委员会版本或优化失败没有任何关系。 相反,这是一个不完整的exim二进制编译/链接。 有一个标志(-rdynamic)让gcc告诉链接器将符号导出为dynamic加载的模块。 在构buildmysql.so 构buildExim二进制文件时,必须将此标志传递给gcc。

如果这个RPM基于Fedora exim.spec文件(我的是),我发现有一些补丁在Local/Makefile中设置了LFLAGSvariables,但是make命令在命令行上覆盖了LFLAGS。 简单地将你设置的LFLAGS移动到你的Local / Makefile中,然后从make命令中删除它:

 # This used to be set on the make commandline echo 'LFLAGS+=-pie' >> Local/Makefile # # Then further down where the make command is, # remove the LFLAGS= setting, leaving only: make _lib=%{_lib} FULLECHO= 

另外,很可能你需要添加到你的Local/Makefile

 LFLAGS+=-rdynamic -ldl # _OR_ EXTRALIBS_EXIM+=-rdynamic -ldl 

更多细节可以在这里find: https : //stackoverflow.com/a/482556/611911

注意:当你接受我提供的第一个答案的时候,所有确实是说“是的,我也有这个问题”。 这个答案实际上解决了这个问题。 🙂