Hi,

        I am trying to build a stub of a C++ extension, with just some
        empty classes, just so I can get the build and link process
        down.  I will add real code later.

        My two main references for this are this HOWTO and the php
        documentation:

http://bugs.tutorbuddy.com/phpcpp/phpcpp/index.html
http://www.php.net/manual/en/zend.creating.php

        I have set up the source files account to the tutorbuddy
        howto.  (They are in an extension directory named cppext2 not
        cppext, because I have tried several different things by now.)

        When I get everything set up and build, it doesn't build the
        class.cpp file, even though that is listed in the config.m4
        file.  I compared my config.m4 to the one in the cryptocpp
        extension also on tutorbuddy (because that was the only other
        C++ PHP extension I could find).  It seems right.  In
        particular, the source files are listed in a line like this:

PHP_NEW_EXTENSION(cppext2, cppext2.cpp class.cpp, $ext_shared)

        And yet when I configure all of PHP with --with-cppext2, and
        build, I get this for the very first part of the build
        process:


[EMAIL PROTECTED] php-4.3.4]# make
/bin/sh /root/php-extension/php-4.3.4/libtool --silent --preserve-dup-deps 
--mode=compile g++ -Iext/cppext2/ -I/root/php-extension/php-4.3.4/ext/cppext2/ 
-DPHP_ATOM_INC -I/root/php-extension/php-4.3.4/include 
-I/root/php-extension/php-4.3.4/main -I/root/php-extension/php-4.3.4 
-I/root/php-extension/php-4.3.4/Zend -I/root/php-extension/php-4.3.4/ext/xml/expat  
-I/root/php-extension/php-4.3.4/TSRM  -g -O2  -prefer-pic -c 
/root/php-extension/php-4.3.4/ext/cppext2/cppext2.cpp -o ext/cppext2/cppext2.lo 
/bin/sh /root/php-extension/php-4.3.4/libtool --silent --preserve-dup-deps 
--mode=compile gcc  -Iext/ctype/ -I/root/php-extension/php-4.3.4/ext/ctype/ 
-DPHP_ATOM_INC -I/root/php-extension/php-4.3.4/include 
-I/root/php-extension/php-4.3.4/main -I/root/php-extension/php-4.3.4 
-I/root/php-extension/php-4.3.4/Zend -I/root/php-extension/php-4.3.4/ext/xml/expat  
-I/root/php-extension/php-4.3.4/TSRM  -march=athlon-xp -O2  -prefer-pic -c 
/root/php-extension/php-4.3.4/ext/ctype/ctype.c -o ext/ctype/ctype.lo

        As you can see, it only builds cppext2.cpp and then jumps
        right to building the next extension.  Then at the end,
        because it didn't build the class.cpp, it complains about
        undefined references and fails to link:

ext/cppext2/cppext2.lo(.text+0xe4): In function `zif_myphpclass(int, _zval_struct*, 
_zval_struct*, int)':
/usr/include/c++/3.2.2/bits/stl_alloc.h:664: undefined reference to 
`MyPHPClass::MyPHPClass[in-charge](std::basic_string<char, std::char_traits<char>, 
std::allocator<char> >)'
ext/cppext2/cppext2.lo(.text+0x26e): In function `zif_myphpclass_getstring(int, 
_zval_struct*, _zval_struct*, int)':
/usr/include/c++/3.2.2/bits/basic_string.h:781: undefined reference to 
`MyPHPClass::getString() const'
ext/cppext2/cppext2.lo(.text+0x2ab):/usr/include/c++/3.2.2/bits/basic_string.h:391: 
undefined reference to `MyPHPClass::getString() const'
ext/cppext2/cppext2.lo(.text+0x416): In function `zif_myphpclass_setstring(int, 
_zval_struct*, _zval_struct*, int)':
/usr/include/c++/3.2.2/bits/stl_alloc.h:664: undefined reference to 
`MyPHPClass::setString(std::basic_string<char, std::char_traits<char>, 
std::allocator<char> >)'
collect2: ld returned 1 exit status
make: *** [sapi/cli/php] Error 1
[EMAIL PROTECTED] php-4.3.4]#

        So how do I get it to build all the files ?  Do I need to list
        the files in another place besides config.m4 ?  The cryptocpp
        extension also lists them in a Makefile.in, but when I added
        such a file on the same pattern listing my files, nothing
        different happened in the build.

        Do I need to run the phpize command ?  I see references to it
        in various documentation, but things seem to work as far as
        they go without it, and running it puts a lot of stuff in the
        extension directory without actually changing anything that
        happens when I build.

        I think my next step will be to install libcrypto++ on my
        machine so I can enable the cryptocpp module, make sure that
        works, and then try to copy that to a new extension directory
        and gradually strip it down until I have a C++ extension
        template.  It shouldn't really be this hard, so I must be
        missing something simple . . . please respond with any hints
        or tips even if you don't know the complete answer to these
        problems, I can use all the help I can get.

        Thanks in advance !

--Rob

                

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to