Errors Compiling PHP with Sablotron
Posted November 30th, 2003 in PHP (Updated May 24th, 2005)
The Electric Toolbox website uses the Sablotron and Expat libraries to convert XML to XSL. These extensions are very fast at running these XSL transformations and are available for download from The Ginger Alliance (Sablotron) and Sourceforge (Expat).
To compile Sablotron into PHP you must first compile Expat and Sablotron. When compiling PHP, add the --enable-xslt and --with-xslt-sablot flags. Note that you should not use Expat version 1.95.6 as it is broken and will not work; use 1.95.5 instead.
When I first attempted to compile these extensions into PHP I kept getting the same errors (I'm not sure which version of PHP I first had this problem with, or whether it is still a problem), which are as follows:
/usr/local/lib/libsablot.so: undefined
reference to `operator new[](unsigned)'
/usr/local/lib/libsablot.so:
undefined reference to `vtable for __cxxabiv1::__si_class_type_info'
/usr/local/lib/libsablot.so: undefined reference to `operator
delete(void*)'
/usr/local/lib/libsablot.so: undefined reference to
`__gxx_personality_v0'
/usr/local/lib/libsablot.so: undefined
reference to `__cxa_pure_virtual'
/usr/local/lib/libsablot.so:
undefined reference to `vtable for __cxxabiv1::__class_type_info'
/usr/local/lib/libsablot.so: undefined reference to `operator
delete[](void*)'
/usr/local/lib/libsablot.so: undefined reference to
`vtable for __cxxabiv1::__vmi_class_type_info'
/usr/local/lib/libsablot.so: undefined reference to `operator
new(unsigned)'
collect2: ld returned 1 exit status
make: ***
[sapi/cgi/php] Error 1
To fix this problem you need to modify the Makefile after running the PHP configure script. If you have already run "make" and got the error above, you'll need to run "make clean" otherwise you'll end up with the same problem.
Open up the Makefile in your favorite text editor and locate the line labelled "EXTRA_LDFLAGS". It will look something like so (not the directory locations may not be exactly the same and you may have more or less flags depending on what other modules you are compiling in):
EXTRA_LDFLAGS = -avoid-version -module
-L/usr/local/lib -L/usr/lib/mysql
Modify the line to have "-lstdc++" at the end. It will now look similar to:
EXTRA_LDFLAGS = -avoid-version -module
-L/usr/local/lib -L/usr/lib/mysql -lstdc++
Now run make and you should be fine. If you still have the
same problem, add -lstdc++ to the end of the
EXTRA_LIBS line which is a couple of lines below the
EXTRA_LDFLAGS in the makefile like in the following
example:
EXTRA_LIBS = -lcrypt -lc-client -lsablot
-lexpat -lcrypt -lpq -lpdf -lz -lpng -ljpeg -lmysqlclient -lcrypt -lpam
-lt1 -lfreetype -lpng -lz -ljpeg -lz -lresolv -lm -ldl -lnsl -lcrypt
-lcrypt -lstdc++
Subscribe!
If you found this post interesting and would like to be notified the next time something is posted, please subscribe to my RSS Feed. Thanks for visiting!

