[phpmodule] PHP weigert te laden :(

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023
Ik heb een pracht van een functietje gemaakt in c:
C:
1
2
3
4
/* File : example.c */
int my_mod(int x, int y) {
    return (x%y);
}


En daarbij heb ik een swig-interfacefile gemaakt:
C:
1
2
3
4
5
6
7
/* example.i */
 %module example
 %{
 /* Put header files here (optional) */
 %}
 
 extern int my_mod(int x, int y);


Dat geheel compileer ik:
code:
1
2
3
swig -php example.i
cc -I.. `php-config --includes`  -fpic -c example_wrap.c
cc -shared example_wrap.o -o example.so


Als ik echter de betreffende module wil laden in php, krijg ik de fout: Warning: Invalid library (maybe not a PHP library) 'mod_irc_wrap.so' in /var/www/irc/mod_irc/testmod.php on line 3
Verder krijg ik geen informatie. Er wordt me niet verteld waarom het fout is, wat er eigenlijk fout is, gewoon alleen dat het fout is...

Heeft iemand een idee waar dit aan kan liggen, of wat ik er aan kan doen?

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

ik compileer de highlighter van oisyn met
code:
1
2
3
4
5
6
flex++ -olexer_c.cpp -Slexer.skl lexer_c.l      // voor alle lexer_*.l files
g++ /I. -olexer_c.o -c lexer_c.cpp              // voor alle lexer_*.cpp files

gcc -I. -I/usr/local/include/php/TSRM/ -I/usr/local/include/php/Zend/
    -I/usr/local/include/php/main/ -I/usr/local/include/php
    -L/usr/src/php-4.2.2/libs -shared -oblaat.so -lphp4 main.c lexer_c.o

FYI. De .so file begint met 'ELF' (na 2/3 chars) als dat helpt.

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

Verwijderd

php modules kun je niet zomaar ff een stukkie c voor schrijven, op php.net staan wel instructies voor hoe het wel kan, het moet met allerlei headers, en met php.h geinclude in je .so

Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023
Verwijderd schreef op 09 February 2003 @ 17:11:
php modules kun je niet zomaar ff een stukkie c voor schrijven, op php.net staan wel instructies voor hoe het wel kan, het moet met allerlei headers, en met php.h geinclude in je .so
Daarom gebruik ik ook SWIG, die doet dat voor je...

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023
Ik heb inmiddels een ander methode gevonden, staat niet in de docs van SWIG, maar wel in alle examples...

code:
1
2
3
4
5
swig -php -phpfull -c++ example.i
phpize
./configure
make
make install


Dat werkt (eindelijk!) alleen zodra ik mijn functie aanroep krijg ik de melding "/usr/bin/php4: relocation error: /usr/lib/php4/20010901/php_example.so: undefined symbol: my_mod"

Ik heb even op google gekeken, de combinatie phpize en relocation-error leveren niets op... Ik ga zelf natuurlijk ook nog verder zoeken,

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023
Ik heb het werkend. Dat gedoe met PHPIZE is alleen als je je module in wilt bouwen in PHP. Dat lijkt me nu een beetje overkill ;-)

De volgende codes werken:
code:
1
2
3
4
export PHPINC=`php-config --includes`
swig -php4 -c++ example.i
g++ -I. ${PHPINC} -L/usr/lib/php4/build/ -shared -c example_wrap.cpp example.c
ld -shared -o php_example.so example_wrap.o example.o


Het grote verschil is dat ik was vergeten example.c zelf mee te compileren. Aangezien we linken naar een library klaagt 'ie daar niet over...

Bedankt voor de hulp...

Localhost, sweet localhost

Pagina: 1