Support for C++ extension in UNIX builds

php.internals

Mark Spruiell

23 years ago
I've written a PHP5 extension in C++ that builds great on Linux with GCC, whether I compile it into PHP or build it as a shared library. On Solaris with Sun CC, however, I've had to manually edit the Makefile or the libtool script in order to successfully build my extension. When I compile the extension into PHP, I have to change $(CC) to $(CXX) in certain places in the Makefile. When I build it as a dynamic library, I have to edit libtool so that it uses $(CXX) and not ld to create the shared library. Am I overlooking some configuration step that eliminates the need to manually edit these files? Thanks, - Mark

Jani Taskinen

23 years ago
Add PHP_REQUIRE_CXX to your config.m4 --Jani On Tue, 19 Aug 2003, Mark Spruiell wrote:

Mark Spruiell

23 years ago
> > Add PHP_REQUIRE_CXX to your config.m4
Thanks for the reply, but I've already got PHP_REQUIRE_CXX in my config.m4, and I'm setting the cxx flag in PHP_NEW_EXTENSION. Is there anything else I'm missing? - Mark

Sascha Schumann

23 years ago
> On Solaris with Sun CC, however, I've had to manually edit the > Makefile or the libtool script in order to successfully build > my extension. When I compile the extension into PHP, I have to > change $(CC) to $(CXX) in certain places in the Makefile.
*.cpp files are automatically compiled using $(CXX). Make sure that you use the sanctioned suffix.
> When I build it as a dynamic library, I have to edit libtool so > that it uses $(CXX) and not ld to create the shared library.
libtool 1.4 does not support building DSOs in a portable way for any language but C. Try libtool 1.5. - Sascha

J Smith

23 years ago
fwiw, I've never had these problems with gcc's C++ compiler on Solaris when building C++ extensions, and the final linking step is usually done by gcc, not g++. When you do the linking, do you link to the stdc++ library? J Mark Spruiell wrote:

Mark Spruiell

23 years ago
> > fwiw, I've never had these problems with gcc's C++ compiler on Solaris when > building C++ extensions, and the final linking step is usually done by gcc, > not g++. When you do the linking, do you link to the stdc++ library?
Unlike GCC, Sun's C and C++ compilers are independent entities, therefore you can't link a C++ program or shared library when the C compiler is driving the linker. It's also not possible to compile PHP's C code with Sun's C++ compiler. I guess we're a little spoiled by GCC. :) - Mark

J Smith

23 years ago
Mark Spruiell wrote:
> > Unlike GCC, Sun's C and C++ compilers are independent entities, therefore > you can't link a C++ program or shared library when the C compiler is > driving the linker. It's also not possible to compile PHP's C code with > Sun's C++ compiler. > > I guess we're a little spoiled by GCC. :) > > - Mark >
I suppose so. I rarely use Sun's compiler so I won't hazard a guess as to what's going on here. I guess you don't have access to gcc on that machine, eh? J

Mark Spruiell

23 years ago
> Mark Spruiell wrote: >> >> Unlike GCC, Sun's C and C++ compilers are independent entities, therefore >> you can't link a C++ program or shared library when the C compiler is >> driving the linker. It's also not possible to compile PHP's C code with >> Sun's C++ compiler. >> >> I guess we're a little spoiled by GCC. :) >> >> - Mark >> > > I suppose so. I rarely use Sun's compiler so I won't hazard a guess as to > what's going on here. I guess you don't have access to gcc on that machine, > eh?
GCC works great for me on Linux, but we haven't needed to port our code to GCC on Solaris yet. - Mark