Jak prelozit .so modul do php

Pavel Lisy pali na tmapy.cz
Pondělí Listopad 5 12:28:45 CET 2001


Dobry den,

jiz nekolik dni se morim s problemem, jak prekladat rozsireni do PHP4,
ktera by se tam natahovala jako dynamicke moduly.

Tj. Do apache se natahne libphp4.so (ale to me nyni nezajima)
a v php.ini chci mit nadefinovano, ze se natahne 
--
extension=cpdf.so
extension=curl.so
extension=cybercash.so
extension=db.so
extension=dbase.so
--
misto toho, aby byly tato rozsireni zakompilovana primo do libphp4.so.

V php.spec v novem RH jsem nasel nejaky nastin, jak to delaji, ale
--
CFLAGS="$RPM_OPT_FLAGS -fPIC"; export CFLAGS
LIBS="-lttf -lfreetype -lpng -ljpeg -lz -lnsl"; export LIBS
REDO_ALL=yes; export REDO_ALL
EXTENSION_DIR=%{_libdir}/php4; export EXTENSION_DIR

compile() {
%configure \
   --prefix=%{_prefix} \
   --with-config-file-path=%{_sysconfdir} \
   --disable-debug \
   --enable-pic \
   --disable-rpath \
   --enable-inline-optimization \
   $* \
   --with-bz2 \
   --with-curl \
   --with-db3 \
   --with-dom \
   --with-exec-dir=%{_bindir} \
   --with-gd \
   --with-gdbm \
   --with-gettext \
   --with-jpeg-dir=%{_prefix} \
   --with-mm \
   --with-openssl \
   --with-png \
   --with-regex=system \
   --with-ttf \
   --with-zlib \
   --with-layout=GNU \
   --enable-debugger \
   --enable-ftp \
   --enable-magic-quotes \
   --enable-safe-mode \
   --enable-sockets \
   --enable-sysvsem \
   --enable-sysvshm \
   --enable-track-vars \
   --enable-yp \
   --enable-wddx \
   --without-mysql \
   --without-unixODBC \
   --without-oracle \
   --without-oci8 \
   --with-pspell \
   --with-xml
make
}

...

# Build individual PHP modules.
build_ext() {
./libtool --mode=link \
%{__cc} -fPIC -shared $RPM_OPT_FLAGS \
   -DCOMPILE_DL_`echo $1 | tr '[a-z]' '[A-Z]'` \
   -DHAVE_`echo $1 | tr '[a-z]' '[A-Z]'` \
   -I. -I./TSRM -I./main -I`%{_sbindir}/apxs -q INCLUDEDIR` -I./Zend \
   -I/usr/include/freetype -I/usr/include/$1 \
   -I./ext/$1 -I./ext/$1/lib$1 \
   -I./ext/xml/expat/xmltok -I./ext/xml/expat/xmlparse \
   `grep ^CPPFLAGS Zend/Makefile | cut -f2- -d=` \
   $4 $2 -o $1.so -L.libs $3 -lc
}
                                                
build_ext imap ext/imap/php_imap.c "%{_libdir}/c-client.a $krb5libs \
	$ssllibs -lpam" "-DHAVE_IMAP2000 -DHAVE_IMAP_SSL"
build_ext ldap ext/ldap/ldap.c "-lldap -llber"
build_ext pgsql ext/pgsql/pgsql.c "-lpq" -DHAVE_PQCMDTUPLES
build_ext mysql ext/mysql/php_mysql.c "-L/usr/lib/mysql -lmysqlclient" \
	"-DHAVE_MYSQL_MYSQL_H -DHAVE_MYSQL_REAL_CONNECT" \
build_ext odbc ext/odbc/php_odbc.c "-lodbc" "-DHAVE_UNIXODBC \
	-DHAVE_UODBC"
%if %{oracle}
  build_ext oci8 ext/oci8/oci8.c "-I${ORACLE_HOME}/rdbms/public \
	-I${ORACLE_HOME}/rdbms/demo -L${ORACLE_HOME}/lib -lclntsh"
%endif

--
bohuzel nejsem schopen to extrapolovat na dalsi moduly (napr. dbase.so)
napr. po pridani nasledujiciho radku: 
--
build_ext dbase ext/dbase/dbase.c
--
se sice "neco" vytvori, ale je to nefunkcni.

Hledam jiz nekolik dni pres google nejaky popis, jak by se to tedy melo
delat (jsa C programovani neznalec), ale bezuspesne.

Jste mi nekdo poradit, jak sestavit funkcni radku pro dbase.so nebo lepe
adt odkaz na dokumentaci ci navod jak se to tedy ma delat, protoze bych
takto chtel prelozit pokud mozno vse (mssql70, interbase, ...)

Za vsechny namety sedouci k reseni jsem jiz dopradu VELMI vdecny

Pavel Lisy




Další informace o konferenci Linux