Nicolas
Nicolas

Reputation: 455

Error compiling php5.5.18 on MacOSX 10.10 (yosemite)

I'm trying to compile php (5.5.18, version doesn't matter that much imho) on yosemite but it fails during the link phase. It looks like some apache symbols are gone?

(The following worked perfectly on Mountain Lion, but fails on Yosemite.)

cc -bundle -bundle_loader /usr/sbin/httpd -L/usr/lib -laprutil-1 -lldap -llber -lexpat -liconv -lsqlite3 -lldap -llber -L/usr/lib -lapr-1 -lpthread -I/usr/include -g -O2 -fvisibility=hidden  -arch x86_64 -bind_at_load
<SNIP>
sapi/apache2handler/php_functions.o main/internal_functions.o  -lcrypto -lssl -lcrypto -lz -lexslt -ltidy -lresolv -ledit -lncurses -lltdl -lldap -llber -lstdc++ -liconv -liconv -lz -lcrypto -lssl -lcrypto -lcurl -lbz2 -lz -lcrypto -lssl -lcrypto -lm -lxml2 -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lcurl -lxml2 -lz -lbz2 -lxml2 -lnetsnmp -lcrypto -lxml2 -lxml2 -lxml2 -lxml2 -lxml2 -lxml2 -lxml2 -lxslt  -o libs/libphp5.bundle && cp libs/libphp5.bundle libs/libphp5.so
Undefined symbols for architecture x86_64:
  "_ap_get_server_version", referenced from:
      _zif_apache_get_version in php_functions.o
      _zm_info_apache in php_functions.o
  "_ap_log_error", referenced from:
      _php_pre_config in sapi_apache2.o
      _php_handler in sapi_apache2.o
      _php_apache_sapi_log_message in sapi_apache2.o
  "_ap_log_rerror", referenced from:
      _php_handler in sapi_apache2.o
      _php_apache_sapi_log_message in sapi_apache2.o
  "_unixd_config", referenced from:
      _zm_info_apache in php_functions.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [libs/libphp5.bundle] Error 1

Any ideas? I checked /usr/lib/libapr-1.dylib (with nm -g) and the symbols are not present. Where should I normally find those symbols? Is this missing a lib? What's really weird is that my custom build script worked fine on 10.9 but fails on 10.10

Thanks for the help! Nicolas

Upvotes: 2

Views: 1340

Answers (3)

kantti
kantti

Reputation: 1

I used MacPorts to install some libraries (like mcrypt), and then I compiled the 5.5.18 source code (with Xcode command line) using the following ./configure -command:

./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/private/etc --enable-gd-native-ttf --with-icu-dir=/usr --with-ldap=/usr --with-ldap-sasl=/usr --with-libedit=/usr --enable-mbstring --enable-mbregex --with-mysql=mysqlnd --with-mysqli=mysqlnd --without-pear --with-pear=no --with-pdo-mysql=mysqlnd --with-mysql-sock=/tmp/mysql.sock --with-readline=/usr --enable-shmop --with-snmp=/usr --enable-soap --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --with-tidy --enable-wddx --with-xmlrpc --with-iconv-dir=/usr --with-xsl=/usr --enable-zip --with-mcrypt=/opt/local/include --without-iconv --with-freetype-dir=/opt/local --with-apxs2=/usr/sbin/apxs --with-openssl=/usr --with-curl=/usr --with-zlib=/usr --with-bz2=/usr

Upvotes: 0

thbourlove
thbourlove

Reputation: 31

Install Xcode 6.1 at first, then:

sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include /usr/include

Upvotes: 0

Nicolas
Nicolas

Reputation: 455

Turned out that it was using the following include path:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/apache2/

Instead of the normal one:

/usr/include/apache2/

Some more info:

$ xcodebuild -version -sdk macosx

MacOSX10.9.sdk - OS X 10.9 (macosx10.9)
SDKVersion: 10.9
Path: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk
PlatformVersion: 1.1
PlatformPath: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform
ProductBuildVersion: 13F26
ProductCopyright: 1983-2014 Apple Inc.
ProductName: Mac OS X
ProductUserVisibleVersion: 10.9.5
ProductVersion: 10.9.5

Strange, I hope it helps other people.

Best, Nicolas

Upvotes: 2

Related Questions