Bu bölüm, derleme sırasında oluşan hatalardan sık rastlananlarla ilgili sorular ve çözümlerden derlenmiştir.
Sisteminizde GNU autoconf paketi kuruluysa configure betiğini
configure.in dosyasından üretebilirsiniz.
Tek yapacağınız Git sunucusundan aldığınız kaynak kök dizininde
./buildconf komutunu vermek olacak. (Ayrıca,
configure betiğini
--enable-maintainer-mode
seçeneğiyle çalıştırmadıkça configure.in
güncellendiğinde configure betiği yeniden oluşturulmaz, bu bakımdan
configure.in değiştiğine dair uyarı alırsanız ne
yapılacağı konusunda emin olmalısınız.) Bunun tek belirtisi configure
veya config.status çalıştırıldıktan sonra Makefile
dosyanızda @VARIABLE@
gibi şeyler bulunmasıdır.)
configure/setup betiğine Apache kaynak ağacınınızın en üst seviye dizininin yerini belirtmeniz lazım. Yani, seçenekte yolu --with-apache=/bir/yol/apache biçiminde belirteceksiniz, --with-apache=/bir/yol/apache/src biçiminde değil.
./configure
), şöyle bir hata
alıyorum:
Kurulum talimatlarını dikkatle okuyun ve PHP'yi derlemeden önce kurulması gereken bison ve flex sürümlerine dikkat edin. Dağıtımınıza ve yapılandırmanıza bağlı olarak bison ve flex'i kaynak kodlarından kendiniz derleyebileceğiniz gibi RPM gibi bir paketten de kurabilirsiniz.
configure betiğine, standart yerlerinde bulunmayan başlık dosyalarının ve kütüphanelerin yerlerini ek seçeneklerle belirterek bunların C önişlemcisine ve ilintileyiciye aktarılmasını sağlamalısınız. Örnek:
CPPFLAGS=-I/bir/yol/include LDFLAGS=-L/bir/yol/lib ./configure
env CPPFLAGS=-I/bir/yol/include LDFLAGS=-L/bir/yol/lib ./configure
yytname undeclared
diye bir takım hatalar veriyor
Bison sürümünüzü güncellemeniz gerekiyor. En son sürümü » http://www.gnu.org/software/bison/bison.html adresinde bulabilirsiniz.
Eski make sürümleri functions dizinindeki dosyaların derlenmiş sürümlerini aynı dizine koymuyor. cp *.o functions komutunu verdikten sonra tekrar make komutunu çalıştırıp bunun yararı olup olmadığına bakın. Eğer işe yarıyorsa GNU make'i en son sürümüne yükseltmeniz gerekiyor demektir.
İlintileme satırında ilgili kütüphanelerin hepsi var mı diye bir bakın. Örneğin, '-ldl' veya bulunmasını istediğiniz veritabanı desteği için gereken kütüphaneler satırda eksik olabilir.
Bazı kişiler Apache ile ilintileme sırasında '-ldl'nın hemen ardına libphp4.a eklemek zorunda kaldıklarını bildirdiler.
PHP modülünün bir şekilde PHP dosyalarını yorumlamak üzere devreye girmediği anlaşılıyor. Öncelikle şu üç şeyi yerine getirin:
/bir/yol/bin/httpd
-l
komutunu deneyin.
Komutun çıktısında mod_php4.c yer almıyorsa
doğru çalıştırılabiliri kullanmıyorsunuz demektir. Doğru
çalıştırılabiliri bulup onu kurun.
Apache .conf
dosyalarınızdan ilgili olanına PHP
için doğru MIME türünü eklediğinizden emin olun. Gerekli satır:
AddType application/x-httpd-php .php
Ayrıca, bu AddType satırının bir <Virtualhost> veya
<Directory> bloğunun içinde kalıp, betiğinizin çalıştığı
konumda etkisiz olmadığından da emin olmalısınız.
--activate-module=src/modules/php4/libphp4.a
yapılandırmasını kullandığını söylüyor ama bu dosya yok. Yapılandırmayı
--activate-module=src/modules/php4/libmodphp4.a
olarak değiştirdiğimde ise çalışmıyor!? Ne yapmalıyım?
libphp4.a dosyasının mevcut olduğunun "varsayıldığına" dikkat etmemişsiniz. Apache ikinci kez derlenirken o dosyayı kendisi üretecek!
--activate-module=src/modules/php4/libphp4.a
ile
yapılandırırken derleyicimin ANSI uyumlu olmadığı hatasını alıyorum.
Bu Apache'nin sonraki sürümlerinde düzeltilen gözden kaçmış bir hatadır.
Burada bakacağınız üç şey var. Birincisi, bir sebeple Apache derlenirken apxs Perl betiği bazen hatalı derleyici ve ortam değişkenleri ile derleme yapmaya çalışabiliyor. apxs betiğini bulup (which apxs komutu yardımcı olabilir, genellikle yeri /usr/local/apache/bin/apxs veya /usr/sbin/apxs'tir) açın ve aşağıdaki satırların benzerleri var mı diye bir bakın:
my $CFG_CFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl my $CFG_LD_SHLIB = ' '; # substituted via Makefile.tmpl my $CFG_LDFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl
my $CFG_CFLAGS_SHLIB = '-fpic -DSHARED_MODULE'; # substituted via Makefile.tmpl my $CFG_LD_SHLIB = 'gcc'; # substituted via Makefile.tmpl my $CFG_LDFLAGS_SHLIB = q(-shared); # substituted via Makefile.tmpl
my $CFG_LIBEXECDIR = 'modules'; # substituted via APACI install
my $CFG_LIBEXECDIR = '/usr/lib/apache'; # substituted via APACI install
RUSAGE_
'li iletiler ve bazı hatalar alıyorum.
Kurulumun make kısmında sorun şuna benzer bir çıktıyla kendini gösteriyorsa:
microtime.c: In function `php_if_getrusage': microtime.c:94: storage size of `usg' isn't known microtime.c:97: `RUSAGE_SELF' undeclared (first use in this function) microtime.c:97: (Each undeclared identifier is reported only once microtime.c:97: for each function it appears in.) microtime.c:103: `RUSAGE_CHILDREN' undeclared (first use in this function) make[3]: *** [microtime.lo] Error 1 make[3]: Leaving directory `/home/master/php-4.0.1/ext/standard' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/home/master/php-4.0.1/ext/standard' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/master/php-4.0.1/ext' make: *** [all-recursive] Error 1
Sorun sisteminizde demektir. Kullandığınız glibc'nin glibc-devel paketini kurup /usr/include dosyalarınızı tamamlayın. Bunun PHP ile hiçbir alakası yoktur. Sorunu kendiniz çözmelisiniz. Basit bir deneme yapın:
$ cat >test.c <<X #include <sys/resource.h> X $ gcc -E test.c >/dev/null
make
işlemi
sırasında şuna benzer bir hata iletisi alıyorum:
ext/mysql/libmysqlclient/my_tempnam.o(.text 0x46): In function
my_tempnam': /php4/ext/mysql/libmysqlclient/my_tempnam.c:103: the
use of tempnam' is dangerous, better use mkstemp'. Neyi
yanlış yapıyorum?
Önce dikkat etmeniz gereken şey bunun ölümcül bir hata değil bir uyarı
(Warning
) olduğudur. Bu genellikle
make
işleminin son çıktısı olduğundan bir ölümcül
hata gibi görünür ama değildir. Eğer derleyicinizi uyarıları vermeyecek
şekilde ayarlarsanız bu iletiyi bir daha almazsınız. Ayrıca, PHP 4'te
MySQL desteğinin öntanımlı olarak etkin olduğunu unutmayın.
Bilginize:
PHP 4.3.2 ve sonrasında, derleme (make) işleminin bitiminde şöyle bir çıktı göreceksiniz:
Türkçesi: Derleme tamamlandı. (tempnam ve tmpnam ile ilgili uyarıları rahatça gözardı edebilirsiniz).
Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).
PHP'yi derlediğiniz kaynak dizininzdeki config.nice dosyasında bulabilirsiniz. Bu yoksa, aşağıdaki betiği çalıştırın:
<?php phpinfo(); ?>
GD kütüphanesinin PHP'nin bağımlı olduğu kütüphanelerle (libpng gibi) ilintilenerek derlenmiş olduğundan emin olun.
PHP'yi GNU araçları dışında araçlarla derlemek bazı sorunlara sebep
olabilir. PHP'yi GNU araçlarıyla derlemeye çalışın. Örneğin, Solaris'te
SunOS BSD uyumlu veya Solaris sürümü sed
çalışmayacak fakat GNU veya Sun POSIX (xpg4) sürümleri çalışacaktır.
Derleme için gerekli araçlar: » GNU
sed, » GNU flex ve
» GNU bison.