From bug-octave-request at bevo dot che dot wisc dot edu Wed Oct 28 07:54:11 1998 Subject: 2.1.7 with egcs-1.1b From: "John W. Eaton" To: Joao Cardoso Cc: bug-octave Date: Wed, 28 Oct 1998 07:53:22 -0600 (CST) On 28-Oct-1998, Joao Cardoso wrote: | Thanks for your patches. The last one, regarding src/xdiv.cc produced | .rej files, so I had to apply it by hand. I enclose the resulting diff. | | Now at the link stage, I got the following error: | | Undefined first referenced | symbol in file | set_new_handler ../src/liboctinterp.so | | This reference come from src/sighandlers.cc. | | Strangly enought, in libstdc++.so.2.9.0 it appears as: | | zorg:# nm -p /usr/local/lib/libstdc++.so.2.9.0 | fgrep set_new_handler | 00043c38 T set_new_handler__FPFv_v | zorg:# nm -pC /usr/local/lib/libstdc++.so.2.9.0 | fgrep set_new_handler | 00043c38 T set_new_handler(void (*)(void)) | | while in libstdc++.so.2.8.0 it appear as: | | zorg:# nm -p /usr/local/lib/libstdc++.so.2.8.0 | fgrep set_new_handler | 00042150 T set_new_handler | zorg:# nm -pC /usr/local/lib/libstdc++.so.2.8.0 | fgrep set_new_handler | 00042150 T set_new_handler | | It seems that in the new library the symbol is "mangled"??? In older versions of the libstdc++ header , the declaration for set_new_handler looked like this: extern "C++" { typedef void (*new_handler)(); extern "C" new_handler set_new_handler (new_handler); ... so the name wouldn't have been mangled. But now it is declared like this: extern "C++" { ... typedef void (*new_handler)(); new_handler set_new_handler (new_handler); ... so the name *should* be mangled. Perhaps you got the wrong version of this header file when you compiled Octave. jwe