Remus says, sen Zend API kullanarak C / C + + PHP uzatmak gibi. Tarafından bağlanmış öğretici Sara Golemon iyi bir başlangıç olduğunu ve aynı yazar tarafından kitap Extending and Embedding PHP çok daha ayrıntılı olarak konuyu kapsar.
Ancak, bu iki (ve hemen hemen çevrimiçi bulundu herşey) C ve odak gerçekten çalışan C + + uzantıları almak için gereken bazı tweaks örtmeyen fazlalaştı.
config.m4
dosya içinde açıkça C + + standart kütüphane bağlantı gerekir:
PHP_REQUIRE_CXX()
PHP_ADD_LIBRARY(stdc++, 1, PHP5CPP_SHARED_LIBADD)
Herhangi bir C + + kütüphane de C + + lib bağlayan gerektirecektir config.m4
dosyasındaki kontrolleri derleme:
PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,,
[
AC_MSG_ERROR([lib $LIBNAME not found.])
],[
-lstdc++ -ldl
])
EDIT - and here's how to specify g++:
Son ve en az değil, uzantısı oluştururken C + + yerine C daha derleyici / bağlayıcı seçmek için, PHP_NEW_EXTENSION()
olmalıdır için 6th parametresi "yes"
. yani:
PHP_NEW_EXTENSION(your_extension,
your_extension.cpp,
$ext_shared,
,
"-Wall -Werror -Wno-error=write-strings -Wno-sign-compare",
"yes")
PHP build system manual kaynaktan, parametreler şunlardır:
- Uzatma ismi
- Uzatma parçası olan tüm kaynak dosyaları listesi.
- PHP_ARG_WITH () için çağrıldığında configure tarafından tespit edilmiştir (isteğe bağlı)
$ext_shared
, bir değer
- (Isteğe bağlı) "SAPI sınıf", CGI veya CLI SAPI'lerinin özellikle gerektiren uzantıları için yararlıdır. Tüm diğer durumlarda boş bırakılmalıdır.
- Uzantısı inşa ederken CFLAGS eklenecek bayrakların (isteğe bağlı) bir listesi.
- (Isteğe bağlı) Bir mantıksal değer olan, "evet", $ Cxx yerine $ CC kullanılarak inşa edilecek tüm uzantıyı zorlar eğer.
I couldn't work out how to get the configure script to set g++ as the compiler/linker instead of gcc, so ended up hacking the Makefile with a sed command to do a search replace in my bash build script:
phpize
./configure --with-myextension
if [ "$?" == 0 ]; then
# Ugly hack to force use of g++ instead of gcc
# (otherwise we'll get linking errors at runtime)
sed -i 's/gcc/g++/g' Makefile
make clean
make
fi
Presumably there's an automake command that would make this hack unnecessary.