Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 13 Sep 2000 17:49:11 -0700 (PDT)
From:      John Polstra <jdp@polstra.com>
To:        hackers@freebsd.org
Cc:        Janick.Taillandier@ratp.fr
Subject:   Re: Trouble with dynamic loading of C++ libs in PHP v4.02 on FreeBSD  4.1
Message-ID:  <200009140049.RAA01334@vashon.polstra.com>
In-Reply-To: <4F88710E19D4D311B36A00508B08FD0F2C84DA@nyplme11.neuilly.ratp>
References:  <4F88710E19D4D311B36A00508B08FD0F2C84DA@nyplme11.neuilly.ratp>

next in thread | previous in thread | raw e-mail | index | archive | help
In article <4F88710E19D4D311B36A00508B08FD0F2C84DA@nyplme11.neuilly.ratp>,
 <Janick.Taillandier@ratp.fr> wrote:
> We are trying to create a dynamic library of extensions to PHP 4.02.
> This library implements a C++ class and has a C interface using the "Extern C"
> declaration.
> This library is linked with libstdc++.so.3 .
> 
> If the library is called in a C program => no trouble.
> If the library is called from PHP with the "dlopen()" function =>
> [Warning: Unable to load dynamic library
> '/users/em/ftp/php/test_cpp/debug/libphptest.so' - /usr/lib/libstdc++.so.3:
> Undefined symbol "__ti9exception" in
> /usr/local/httpd/htdocs/www/Iti_q/testso.php on line 2

This is because FreeBSD uses an archive library "libgcc.a" instead
of a shared library.  That means that everything from libgcc which
is needed by your shared libraries had better already be linked into
the main program.  The right solution is for us to use a shared
library for libgcc.  (Note to eager committers: don't do this without
coordinating with obrien.  There are ramifications that aren't
obvious.)

As a work-around, try adding this to your main program.  (I am
assuming it is a C++ program too.)

    extern void terminate(void);
    void (*kludge_city)(void) = terminate;

Another possibility would be to link explicitly with libgcc when
creating your dynamic library:

    cc -shared -o libphptest.so ... -lgcc

That might cause other problems, but probably not.

John
-- 
  John Polstra                                               jdp@polstra.com
  John D. Polstra & Co., Inc.                        Seattle, Washington USA
  "Disappointment is a good sign of basic intelligence."  -- Chögyam Trungpa



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200009140049.RAA01334>