Date: Fri, 15 Sep 2000 16:41:20 +0100 From: <Janick.Taillandier@ratp.fr> To: jdp@polstra.com, hackers@freebsd.org Subject: RE: Trouble with dynamic loading of C++ libs in PHP v4.02 on Free BSD 4.1 Message-ID: <4F88710E19D4D311B36A00508B08FD0F2C84F6@nyplme11.neuilly.ratp>
next in thread | raw e-mail | index | archive | help
Thank you John! Linking the library with -lgcc solved the problem. 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 . >=20 > If the library is called in a C program =3D> no trouble. > If the library is called from PHP with the "dlopen()" function =3D> > [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) =3D 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 --=20 John Polstra = jdp@polstra.com John D. Polstra & Co., Inc. Seattle, = Washington USA "Disappointment is a good sign of basic intelligence." -- Ch=F6gyam = 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?4F88710E19D4D311B36A00508B08FD0F2C84F6>