Making Apache, PHP and C++ play nice
| From: | J Smith | Date: | Wed, 20 Jun 2001 16:41:27 +0000 |
| Subject: | Making Apache, PHP and C++ play nice | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-57430@lists.php.net to get a copy of this message | ||
I've been working on some PHP extensions that were written in C++ for a
while now. I wrote the original stuff a while
back, and since I have no great desire to re-write them in C, I decided to
just go ahead and use the C++ instead.
PHP and Apache are both written in C, so there are going to be some obvious
pains involved in getting C++ to work
properly with the C base. (extern "C"'s, linkage problems, etc.)
I managed to get everything to work eventually, but not without a fair
amount of hair pulling and whimpering. In the end, this is
the procedure I came up with:
-- take the library I wrote in C++. Extern "C" a lot of stuff so C code can
see it properly.
-- use ext_skel to make the extension skeleton.
-- write a wrapper for the C++ in C with the stuff the ext_skel produced.
-- modify the config.m4 file ext_skel produces by adding a PHP_REQUIRE_CXX
line.
Now, for some reason, adding PHP_REQUIRE_CXX doesn't seem to do much, so
I'm probably not using it correctly.
Even after adding it, I still need to manually edit config_vars.mk so that
it reads:
CXX = g++
CXXFLAGS = -g -O2
I don't know why.
-- modify the Makefile/Makefile.in files to see the new library that's about
to be created by adding
LTLIBRARY_OBJECTS_X = whatever.lo
-- compile PHP, compile Apache.
Compiling PHP is fine, as the C++ files are done with g++ (or C++ compiler
X) and the C files with gcc
(or whatever C compiler). Apache starts to compile fine, but when it hits
PHP, it starts complaining about
invalid function prototypes and such, especially if I use the STL or
anything of that sort. At this point,
I have to continue compiling Apache with a C++ compiler, which is easy
enough. (I usually just change the
compiler in the apache_path/src/Makefile file by changing "CC=gcc" to
"CC=g++".)
Unfortunately, I can't seem to automate this.
So my question is: is there an easier way? I don't mind having to do all of
this stuff now, but if I have to
do it a bunch of times, it's going to start sucking.
Thanks.
J Smith
pseudo "code, dba and linux guy"
Tutorbuddy Inc.
The Magic Lantern Group
mailto:jsmith@tutorbuddy.com