
bulia byak wrote:
On 5/25/05, Bob Jamison <rjamison@...357...> wrote:
Since this can include moving/renaming classes, and even changing Makefile_inserts, people will likely need to run autogen.sh and a 'make clean;make' in the next few days to avoid missing symbols.
I did run make clean and autogen and configure, but I'm still getting:
ui/dialog/libuidialog.a(dialog-manager.o)(.gnu.linkonce.t._ZN8Inkscape2UI6Dialog57_GLOBAL__N_ui_dialog_dialog_manager.cpp_9D2164D3_478C0BDB6createINS1_10TileDialogEEEPNS1_6DialogEv+0x18): In function `Inkscape::UI::Dialog::Dialog* Inkscape::UI::Dialog::(anonymous namespace)::createInkscape::UI::Dialog::TileDialog()': /usr/lib/gcc/i586-mandrake-linux-gnu/3.4.1/../../../../include/c++/3.4.1/bits/stl_tree.h:444: undefined reference to `Inkscape::UI::Dialog::TileDialog::TileDialog()' ui/dialog/libuidialog.a(tracedialog.o)(.text+0x1d): In function `Inkscape::UI::Dialog::TraceDialogImpl::potraceProcess(bool)': ui/dialog/tracedialog.cpp:185: undefined reference to `Inkscape::Trace::Potrace::PotraceTracingEngine::PotraceTracingEngine()' ui/dialog/libuidialog.a(tracedialog.o)(.text+0xc6):ui/dialog/tracedialog.cpp:233: undefined reference to `Inkscape::Trace::Tracer::getSelectedImage()' ui/dialog/libuidialog.a(tracedialog.o)(.text+0xda):ui/dialog/tracedialog.cpp:236: undefined reference to `Inkscape::Trace::Potrace::PotraceTracingEngine::preview(_GdkPixbuf*)' ui/dialog/libuidialog.a(tracedialog.o)(.text+0x1c7):ui/dialog/tracedialog.cpp:260: undefined reference to `Inkscape::Trace::Tracer::trace(Inkscape::Trace::TracingEngine*)' ui/dialog/libuidialog.a(tracedialog.o)(.text+0x6a8): In function `Inkscape::UI::Dialog::TraceDialogImpl::~TraceDialogImpl()': ui/dialog/tracedialog.cpp:554: undefined reference to `Inkscape::Trace::Tracer::~Tracer()' ui/dialog/libuidialog.a(tracedialog.o)(.text+0x9c3):ui/dialog/tracedialog.cpp:554: undefined reference to `Inkscape::Trace::Tracer::~Tracer()' ui/dialog/libuidialog.a(tracedialog.o)(.text+0xdc8): In function `Inkscape::UI::Dialog::TraceDialogImpl::~TraceDialogImpl()': ui/dialog/tracedialog.cpp:554: undefined reference to `Inkscape::Trace::Tracer::~Tracer()' ui/dialog/libuidialog.a(tracedialog.o)(.text+0x1103):ui/dialog/tracedialog.cpp:554: undefined reference to `Inkscape::Trace::Tracer::~Tracer()' ui/dialog/libuidialog.a(tracedialog.o)(.text+0x1538): In function `Inkscape::UI::Dialog::TraceDialogImpl::~TraceDialogImpl()': ui/dialog/tracedialog.cpp:554: undefined reference to `Inkscape::Trace::Tracer::~Tracer()' ui/dialog/libuidialog.a(tracedialog.o)(.text+0x1878):ui/dialog/tracedialog.cpp:554: more undefined references to `Inkscape::Trace::Tracer::~Tracer()' follow ui/dialog/libuidialog.a(tracedialog.o)(.text+0x1ab4): In function `Inkscape::UI::Dialog::TraceDialogImpl::TraceDialogImpl()': ui/dialog/tracedialog.cpp:336: undefined reference to `Inkscape::Trace::Tracer::Tracer()' ui/dialog/libuidialog.a(tracedialog.o)(.text+0x3141):ui/dialog/tracedialog.cpp:536: undefined reference to `Inkscape::Trace::Tracer::~Tracer()' ui/dialog/libuidialog.a(tracedialog.o)(.text+0x37a6): In function `Inkscape::UI::Dialog::TraceDialogImpl::TraceDialogImpl()': ui/dialog/tracedialog.cpp:336: undefined reference to `Inkscape::Trace::Tracer::Tracer()' ui/dialog/libuidialog.a(tracedialog.o)(.text+0x4e01):ui/dialog/tracedialog.cpp:536: undefined reference to `Inkscape::Trace::Tracer::~Tracer()' ui/dialog/libuidialog.a(tracedialog.o)(.text+0x39e): In function `Inkscape::UI::Dialog::TraceDialogImpl::abort()': ui/dialog/tracedialog.cpp:278: undefined reference to `Inkscape::Trace::Tracer::abort()' collect2: ld returned 1 exit status
While trying to figure out the link-order problem, I looked at the link line:
g++ -Wall -W -Wpointer-arith -Wcast-align -Wsign-compare -Woverloaded-virtual -Wswitch -Wno-unused-parameter -g -O2 -o inkscape --export-dynamic main.o -Wl,--export-dynamic -Wl,-E -Wl,-rpath -Wl,/usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE libinkpre.a application/libinkapp.a dialogs/libspdialogs.a trace/libtrace.a svg/libspsvg.a widgets/libspwidgets.a display/libspdisplay.a helper/libspchelp.a libcroco/libcroco.a libnrtype/libnrtype.a libnr/libnr.a livarot/libvarot.a ui/view/libuiview.a ui/libui.a ui/dialog/libuidialog.a ui/widget/libuiwidget.a extension/libextension.a extension/implementation/libimplementation.a extension/internal/libinternal.a extension/script/libscript.a xml/libspxml.a util/libinkutil.a io/libio.a inkjar/libinkjar.a libinkpost.a debug/libinkdebug.a -L/usr/local/lib ....blah....
Notice that dialogs/libspdialogs.a is near the front, but ui/dialog/libuidialog.a is much farther down the list.
Looking in src/Makefile_insert, here is the link-order of the libs:
inkscape_private_libs = \ libinkpre.a \ application/libinkapp.a \ dialogs/libspdialogs.a \ trace/libtrace.a \ svg/libspsvg.a \ widgets/libspwidgets.a \ display/libspdisplay.a \ helper/libspchelp.a \ libcroco/libcroco.a \ libnrtype/libnrtype.a \ libnr/libnr.a \ livarot/libvarot.a \ ui/view/libuiview.a \ ui/libui.a \ ui/dialog/libuidialog.a \ ui/widget/libuiwidget.a \ extension/libextension.a \ extension/implementation/libimplementation.a \ extension/internal/libinternal.a \ extension/script/libscript.a \ xml/libspxml.a \ util/libinkutil.a \ io/libio.a \ $(inkjar_libs) \ libinkpost.a \ debug/libinkdebug.a
Since libuidialog.a will reference other Inkscape items, the same as libspdialogs.a, it should be at least as far up the list as that one. And since it references TileDialog, it should even be in front of it. So I changed its position to this:
inkscape_private_libs = \ libinkpre.a \ application/libinkapp.a \ ui/dialog/libuidialog.a \ dialogs/libspdialogs.a \ trace/libtrace.a \ svg/libspsvg.a \ widgets/libspwidgets.a \ display/libspdisplay.a \ helper/libspchelp.a \ libcroco/libcroco.a \ libnrtype/libnrtype.a \ libnr/libnr.a \ livarot/libvarot.a \ ui/view/libuiview.a \ ui/libui.a \ ui/widget/libuiwidget.a \ extension/libextension.a \ extension/implementation/libimplementation.a \ extension/internal/libinternal.a \ extension/script/libscript.a \ xml/libspxml.a \ util/libinkutil.a \ io/libio.a \ $(inkjar_libs) \ libinkpost.a \ debug/libinkdebug.a
And the link now looks like this.
g++ -Wall -W -Wpointer-arith -Wcast-align -Wsign-compare -Woverloaded-virtual -Wswitch -Wno-unused-parameter -g -O2 -o inkscape --export-dynamic main.o -Wl,--export-dynamic -Wl,-E -Wl,-rpath -Wl,/usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE libinkpre.a application/libinkapp.a ui/dialog/libuidialog.a dialogs/libspdialogs.a trace/libtrace.a svg/libspsvg.a widgets/libspwidgets.a display/libspdisplay.a helper/libspchelp.a libcroco/libcroco.a libnrtype/libnrtype.a libnr/libnr.a livarot/libvarot.a ui/view/libuiview.a ui/libui.a ui/widget/libuiwidget.a extension/libextension.a extension/implementation/libimplementation.a extension/internal/libinternal.a extension/script/libscript.a xml/libspxml.a util/libinkutil.a io/libio.a inkjar/libinkjar.a libinkpost.a debug/libinkdebug.a -L/usr/local/lib ....blah....
This works, so I committed it. Let me know if I broke anything.
Bob