在雪豹上编译mod_auth_mysql

问题描述

| 如何在SNow Leopard上构建mod_auth_MysqL? 与其将我的发现隐藏在一些博客评论中,我决定在这里将它们记录在一个答案中。 我遇到以下错误
May 24 10:43:44 host org.apache.httpd[6764]: httpd: Syntax error on line 120 of /private/etc/apache2/httpd.conf: Cannot load /usr/libexec/apache2/mod_auth_MysqL.so into server: dlopen(/usr/libexec/apache2/mod_auth_MysqL.so,10): Symbol not found: _make_scrambled_password\\n  Referenced from: /usr/libexec/apache2/mod_auth_MysqL.so\\n  Expected in: flat namespace\\n in /usr/libexec/apache2/mod_auth_MysqL.so
May 24 11:14:06 host org.apache.httpd[10880]: httpd: Syntax error on line 120 of /private/etc/apache2/httpd.conf: Cannot load /usr/libexec/apache2/mod_auth_MysqL.so into server: dlopen(/usr/libexec/apache2/mod_auth_MysqL.so,10): Library not loaded: libMysqLclient.18.dylib\\n  Referenced from: /usr/libexec/apache2/mod_auth_MysqL.so\\n  Reason: image not found
    

解决方法

我必须稍作调整,以使其可以在Mac mini核心二重奏(不支持64位代码)上运行,基本上,您只需要省略对64位体系结构的引用即可:
$ sudo apxs -c -i -a -D lmysqlclient -lmysqlclient -lm -lz -I/usr/local/mysql/include/ \\
-L/usr/local/mysql/lib/ mod_auth_mysql.c
如果遇到错误,找不到XCode工具链的抄送:   env:/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc:没有这样的文件或目录   apxs:错误:命令失败,rc = 65536 那么您要么必须安装XCode,要么符号链接到默认工具链:
$ sudo ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain
另外:Nils Preusker的博客已关闭。您可能仍会在Google的缓存中找到答案。另外,我在这里粘贴了相关部分: 在OS X 10.5.6上编译和安装mod_auth_mysql 2009年4月17日,作者nils apche模块mod_auth_mysql使得可以使用MySQL数据库而不是例如一个passwd文件。 Mac OS X 10.4有该模块的安装程序,但Mac OS X 10.5或更高版本没有安装包或端口。我对源代码进行了一些尝试,最后设法使其编译并使其开始运行,而没有出现错误消息。我创建了一个差异文件来修补mod_auth_mysql.c。以下步骤说明了如何应用补丁,编译模块以及测试apache配置。 我们将首先在您的用户目录中创建一个src文件夹,下载mod_auth_mysql并将其展开:
$ mkdir ~/src
$ cd ~/src
$ curl -O http://puzzle.dl.sourceforge.net/sourceforge/\\
modauthmysql/mod_auth_mysql-3.0.0.tar.gz
$ tar zxvf mod_auth_mysql-3.0.0.tar.gz
现在,您可以在文件夹mod_auth_mysql-3.0.0中找到模块的来源。在我们编译它之前,必须先应用补丁。这是差异文件mod_auth_mysql,保存到 〜/ src / mod_auth_mysql-3.0.0 / mod_auth_mysql.diff 要应用补丁,我们转到sources目录,并执行采用原始文件并将diff文件作为补丁的unix补丁程序:
$ cd mod_auth_mysql-3.0.0
$ patch mod_auth_mysql.c mod_auth_mysql.diff
继续使用32或64位代码... 如果diff文件丢失了,这里是...
209c209
<   #define STRCAT ap_pstrcat
---
>   #define STRCAT apr_pstrcat
592c592
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqlhost),---
>   (void *) APR_OFFSETOF(mysql_auth_config_rec,596c596
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqlport),600c600
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqlsocket),604c604
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqluser),608c608
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqlpasswd),612c612
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqlDB),616c616
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqlpwtable),620c620
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqlgrptable),624c624
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqlNameField),628c628
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqlGroupField),632c632
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqlGroupUserNameField),636c636
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqlPasswordField),640c640
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqlEncryptionField),644c644
<   (void*) APR_XtOffsetOf(mysql_auth_config_rec,mysqlSaltField),---
>   (void*) APR_OFFSETOF(mysql_auth_config_rec,652c652
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqlAuthoritative),656c656
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqlNoPasswd),660c660
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqlEnable),664c664
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqlUserCondition),668c668
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqlGroupCondition),672c672
<   (void *) APR_XtOffsetOf(mysql_auth_config_rec,mysqlCharacterSet),
    ,首先,按照Nils Preusker博客上的说明进行操作,尤其是应用他的补丁。 检查什么路径信息存储在mysqls .dylib文件中
otool -DX /usr/local/mysql/lib/libmysqlclient.18.dylib
这应该返回完整路径,您不必先通过调用来修复它
sudo install_name_tool -id /usr/local/mysql/lib/libmysqlclient.18.dylib  /usr/local/mysql/lib/libmysqlclient.18.dylib
在apxs命令行中添加“ 8”: 汇编:
sudo apxs -c -i -a -D lmysqlclient -lmysqlclient -lm -lz \\ 
 -I/usr/local/mysql/include/ \\
 -L/usr/local/mysql/lib/ -Wc,\"-arch x86_64\" \\
 -Wl,\"-arch x86_64\" mod_auth_mysql.c
确保列出了mysql库:otool -L /usr/libexec/apache2/mod_auth_mysql.so 使用apachectl configtest检查设置 干杯!