Cannot compile my extension as a shared .so library
| From: | Martin Wickman | Date: | Fri, 05 Apr 2002 11:23:37 +0000 |
| Subject: | Cannot compile my extension as a shared .so library | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-91691@lists.php.net to get a copy of this message | ||
Hi
php-4.1.2
linux RH 7.2
I have created a small php extension. The extension works as expected when I compile it using
$ ./configure --with-foo && make # foo is the extension
It gets compiled into the php binary. All is well, but I would like to compile my extension as a loadable modules (ie to use with the dl() function). Thus
$ ./configure --with-foo=shared && make
The compilation completes with no errors. The php binary works (my foo ext is not included in the binary), but I end up with *no* 'foo.so' file. Instead I get this
$ ls -l modules/
51776 Apr 5 13:11 foo.a
647 Apr 5 13:11 foo.la
I expected to see a 'foo.so' file.
Obviously I cannot use dl() on these files.
The foo extension is as simple as possible, just to illustrate the problem. It was created using these commands:
1. $ cd ~/php-4.1.2/ext
2. $ ./ext_skel --extname=foo
3. $ cd ..
4. $ vi ext/foo/config.m4
5. $ ./buildconf
6. $ ./configure --with-foo=shared
7. $ make
The whole config.m4:
PHP_ARG_WITH(foo, for foo support,
[ --with-foo Include foo support])if test "$PHP_FOO" != "no"; then PHP_EXTENSION(foo, $ext_shared) fi Output from make: make[3]: Entering directory `/home/wic/php-4.1.2/ext/foo' /bin/sh /home/wic/php-4.1.2/libtool --silent --mode=compile gcc -I. -I/home/wic/php-4.1.2/ext/foo -I/home/wic/php-4.1.2/main -I/home/wic/php-4.1.2 -I/home/wic/php-4.1.2/Zend -I/home/wic/php-4.1.2/ext/mysql/libmysql -I/home/wic/php-4.1.2/ext/xml/expat -I/home/wic/php-4.1.2/TSRM -g -O2 -prefer-pic -c foo.c && touch foo.slo /bin/sh /home/wic/php-4.1.2/libtool --silent --mode=link gcc -I. -I/home/wic/php-4.1.2/ext/foo -I/home/wic/php-4.1.2/main -I/home/wic/php-4.1.2 -I/home/wic/php-4.1.2/Zend -I/home/wic/php-4.1.2/ext/mysql/libmysql -I/home/wic/php-4.1.2/ext/xml/expat -I/home/wic/php-4.1.2/TSRM -g -O2 -prefer-non-pic -static -o foo.la -avoid-version -module -rpath /home/wic/php-4.1.2/modules foo.lo /bin/sh /home/wic/php-4.1.2/libtool --silent --mode=install cp foo.la /home/wic/php-4.1.2/modules PATH="$PATH:/sbin" ldconfig -n /home/wic/php-4.1.2/modules ---------------------------------------------------------------------- Libraries have been installed in: /home/wic/php-4.1.2/modules [etc...] Note that I can manually create a so-file from the foo.a file using ld as in: $ cd modules; ar x foo.a; ld -Bshareable -o foo.so foo.o and then call dl("foo.so"), but that is not the way to go, right??? I think there is some arcance libtool switch missing in the Makefile, or I need something else in the config.m4 file Btw, my real extension is a lot more complex, but it has the same problems so I figured this foo-thing would be a bit easier to debug :-) I have searched high and low for any leads, but nothing has turned up so far. /Regards