我正在尝试为64位系统上的32位PHP安装编译PHP扩展。但是,重新启动 apache 时收到以下警告:
Warning: PHP Startup: Unable to load dynamic library '/opt/lampp/lib/php/extensions/no-debug-non-zts-20090626/spotify.so' - /opt/lampp/lib/php/extensions/no-debug-non-zts-20090626/spotify.so: wrong ELF class: ELFCLASS64 in Unknown on line 0
我使用以下命令编译所有内容:
/opt/lampp/bin/phpize; CFLAGS=-m32 CPPFLAGS=-m32 CCASFLAGS=-m32 ./configure --enable-spotify --with-php-config=/opt/lampp/bin/php-config; make && make install
标志应确保它编译为 32 位。我已安装gcc-multilib
和g++-multilib
编译完成后(此日志:http://pastebin.com/MqgGgyzv),我执行以下命令:
file /opt/lampp/lib/php/extensions/no-debug-non-zts-20090626/spotify.so
它返回
/opt/lampp/lib/php/extensions/no-debug-non-zts-20090626/spotify.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
所以它显然没有正确编译它,但我看不出我做错了什么。
编译正常,但链接器无意中创建了一个 64 位 .so。
解决方案是在LDFLAGS中包含"-m32":
https://askubuntu.com/questions/85978/building-a-32-bit-app-in-64-bit-ubuntu