2011-08-30 42 views
3

我試圖建立我的新電腦有此配置的PHP:PHP沒有連接MySQL的共享庫上正確建立

export MACOSX_DEPLOYMENT_TARGET=10.7 CFLAGS="-arch x86_64" CXXFLAGS="-arch x86_64" LIBS=-lresolv 
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib 
./configure --prefix=/usr/local --with-apxs2=/usr/sbin/apxs --with-ldap=/usr --with-kerberos=/usr --enable-cli --with-zlib-dir=/usr --enable-exif --enable-ftp --enable-mbstring --enable-mbregex --enable-sockets --with-iodbc=/usr --with-curl=/usr --with-config-file-path=/etc --sysconfdir=/private/etc --with-mysql-sock=/var/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql=/usr/local/mysql --with-openssl=/usr --with-xmlrpc --with-xsl=/usr --without-pear --with-libxml-dir=/usr --with-iconv=/usr/local --with-pdo-mysql=/usr/local/mysql/bin/mysql_config --with-gd --with-jpeg-dir=/usr/local/Cellar --with-png-dir=/usr/X11 --with-freetype-dir=/usr/X11 --with-mcrypt=/usr/local/Cellar --enable-pcntl 

的配置運行正常,但是當我嘗試運行「make」在這次錯誤結束:

Generating phar.phar 
dyld: Library not loaded: libmysqlclient.18.dylib 
    Referenced from: /Users/mdiamond/Downloads/php-5.3.8/sapi/cli/php 
    Reason: image not found 
make: *** [ext/phar/phar.phar] Trace/BPT trap: 5 

這是很奇怪的,考慮到我指定的「出口DYLD_LIBRARY_PATH =在/ usr /本地/ MySQL的/ lib目錄」和libmysqlclient.18.dylib是在這條道路。看起來鏈接器正在尋找沒有路徑的libmysqlclient.18.dylib(在根目錄中?)。我也跑otool我的PHP程序,並得到這個:

/usr/lib/libexslt.0.dylib (compatibility version 9.0.0, current version 9.13.0) 
/usr/lib/libiodbc.2.dylib (compatibility version 4.0.0, current version 4.18.0) 
libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0) 
/usr/local/lib/libmcrypt.4.dylib (compatibility version 9.0.0, current version 9.8.0) 
/usr/local/lib/libltdl.7.dylib (compatibility version 11.0.0, current version 11.0.0) 
/System/Library/Frameworks/LDAP.framework/Versions/A/LDAP (compatibility version 1.0.0, current version 2.2.0) 
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0) 
/usr/X11/lib/libfreetype.6.dylib (compatibility version 13.0.0, current version 13.2.0) 
/usr/X11/lib/libpng15.15.dylib (compatibility version 17.0.0, current version 17.0.0) 
/usr/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5) 
/usr/local/lib/libjpeg.8.dylib (compatibility version 12.0.0, current version 12.0.0) 
/usr/lib/libcrypto.0.9.8.dylib (compatibility version 0.9.8, current version 0.9.8) 
/usr/lib/libssl.0.9.8.dylib (compatibility version 0.9.8, current version 0.9.8) 
/usr/lib/libcurl.4.dylib (compatibility version 7.0.0, current version 7.0.0) 
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0) 
/usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 46.0.0) 
/usr/lib/libxml2.2.dylib (compatibility version 10.0.0, current version 10.3.0) 
/usr/lib/libicucore.A.dylib (compatibility version 1.0.0, current version 46.1.0) 
/System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos (compatibility version 5.0.0, current version 6.0.0) 
/usr/lib/libxslt.1.dylib (compatibility version 3.0.0, current version 3.24.0) 

注意的libmysqlclient是如何不帶路徑的唯一庫。有誰知道我能如何解決這個問題?我運行的配置錯了嗎?

回答

2

我有一個類似的問題,我認爲這與/usr/local/mysql與我的電腦(通過DMG安裝的MySQL)上的/usr/local/mysql-5.5.15-osx10.6-x86_64的符號相關。更改DYLD_LIBRARY_PATH以使用完全限定的路徑似乎得到make爲我工作。

但是,我在make install過程中遇到了後續問題。在Installing PEAR environment步驟中出現了同樣的錯誤消息。到的解決方案,問題是事先做到這一點:

install_name_tool -change libmysqlclient.18.dylib \ 
    /usr/local/mysql-5.5.15-osx10.6-x86_64/lib/libmysqlclient.18.dylib \ 
    /path/to/php-5.3.8/sapi/cli/php 
1

類似的事情發生在我身上時,我試圖編譯PHP 5.4.16與在MacOS X 10.6.8 Snow Leopard的MariaDB的5.5在一起。在make,該方法用這個錯誤報告意外停止:

Undefined symbols: 
"_res_9_dn_expand", referenced from: 
_php_parserr in dns.o 
_php_parserr in dns.o 
_php_parserr in dns.o 
_php_parserr in dns.o 
_php_parserr in dns.o 
_php_parserr in dns.o 
_php_parserr in dns.o 
_zif_dns_get_mx in dns.o 
"_res_9_search", referenced from: 
_zif_dns_check_record in dns.o 
_zif_dns_get_mx in dns.o 
_zif_dns_get_record in dns.o 
"_res_9_init", referenced from: 
_zif_dns_check_record in dns.o 
_zif_dns_get_mx in dns.o 
_zif_dns_get_record in dns.o 
"_res_9_dn_skipname", referenced from: 
_zif_dns_get_mx in dns.o 
_zif_dns_get_mx in dns.o 
_zif_dns_get_record in dns.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 
make: *** [sapi/cli/php] Error 1 

我使用的是一大堆非標準目錄的運行我的服務器(Apache支持PHP,CGI),所以我的配置設置是有點怪對別人沒有幫助。他們已經爲MariaDB 5.2的整個5.4分支工作,直到今天才停止按預期工作。

感謝您的帖子,這是我想出了得到它的編譯和重新安裝成功(當然,根據自己的要求更改路徑):

  1. 之前compile,設置數據庫路徑lib目錄:

    export DYLD_LIBRARY_PATH=/customserver/maria55/lib

  2. 通過選項運行./compile要求

  3. 運行make
  4. 運行此修復破碎的路徑,CGI和CLI二進制文件裏面的MySQL客戶端庫:

    install_name_tool -change install_name_tool -change libmysqlclient.18.dylib /customserver/maria55/lib/libmysqlclient.18.dylib /sources/php-5.4.16/sapi/cli/php

    install_name_tool -change libmysqlclient.18.dylib /customserver/maria55/lib/libmysqlclient.18.dylib /sources/php-5.4.16/sapi/cgi/php-cgi

  5. 運行sudo make install

希望這有助於其他在同樣的情況

0

第二_php_parserr in dns.o錯誤(提到herehere)也可以通過執行以下操作來解決:

編輯您的Makefile並添加以下標誌爲EXTRA_LIBS =部分(除了已經在其他標誌有):

EXTRA_LIBS = -lsresolv 

但如果你可以改變你的路解決這個問題,如上面提到的,這將是可取的。