Are we using SimpleReferenceObject correctly?

Henrik /KaarPoSoft henrik at kaarposoft.dk
Sun Jan 27 13:55:35 PST 2013


Dear all,

As described in the mailing-list-thread
Issues building LibreOffice 4.0.0.1
http://lists.freedesktop.org/archives/libreoffice/2013-January/044838.html
I am trying to build and package LibreOffice 4.0.0.* for KaarPux
http://kaarpux.kaarposoft.dk/

I am starting a new mailing-list thread here to try to address
one issue at a time.

With LibreOffice 4.0.0.2, Stephans patch
http://cgit.freedesktop.org/libreoffice/core/commit/?id=d71e8fb17bd008751909ef2fabc6ff4f1e2db187
no other pathes and the configuration attached as "config.txt"
building is now stuck at
[build LNK] Library/libmysqllo.so
with
undefined reference to 'typeinfo for salhelper::SimpleReferenceObject'

See attached "libmysqllo_lnk_error.txt"

googel'ing the error message tends to indicate a problem with virtual
functions.

salhelper/inc/salhelper/simplereferenceobject.hxx has

class SALHELPER_DLLPUBLIC SimpleReferenceObject
{
[...]
protected:
     virtual ~SimpleReferenceObject() SAL_THROW(());
[...]
};

I am no C++ expert, but as far as I can tell, this makes
SimpleReferenceObject an abstract class, and subclasses
should declare and implement ~SimpleReferenceObject.

A simple grep shows that we have ORowSetValueDecorator defined in
places like
connectivity/inc/connectivity/inc/FValue.hxx

And as far as I can see, ORowSetValueDecorator does NOT
declare ~ORowSetValueDecorator

Grepping for other uses of SimpleReferenceObject turns up many
references, and I picked one at random:
xmloff/inc/xmloff/formlayerimport.hxx

Here we have

     class XMLOFF_DLLPUBLIC OFormLayerXMLImport
                 :public ::salhelper::SimpleReferenceObject
     {
         OFormLayerXMLImport_Impl*   m_pImpl;

     public:
         OFormLayerXMLImport(SvXMLImport& _rImporter);
         ~OFormLayerXMLImport();

So, the subclass here DOES implement
~SimpleReferenceObject
as
~OFormLayerXMLImport()

As I am certainly no C++ expert, please allow me to ask this
question to the list:

Are we using SimpleReferenceObject correctly?
In particular, maybe we should define
~SimpleReferenceObject
in all subclasses ?

Thanks in advance for any input on this.

/Henrik
-------------- next part --------------
    - echo: "autogen"

    - sh: >
        ./autogen.sh

        # TRY TO KEEP THE OPTIONS IN THE SAME SEQUENCE AS ./configure --help

        --prefix="${KX_PREFIX}"

        # For debuging: build packages in sequential order
        --with-parallelism=1

        # When (re-)building sequential build can be achived with:
        # make PARALLELISM=1

        # Disable LibreOffice includes self-packaging code
        --disable-epm

        # This option disables installing the office development kit
        --disable-odk

        # TODO:  Consider --enable-mathmldtd      Enable bundling of (modified) MathML 1.01 DTD.

        #  Allows the built-in evolution 2 addressbook connectivity build to be enabled.
        --enable-evolution2

        # Include debugging symbols in output.
        # WARNING - a complete build needs 8 Gb of space and takes much longer (enables -g compiler flag).
        # --enable-symbols

        # Enable link-time optimization. Suitable for product builds. Building takes longer but libraries are optimized for speed
        --enable-lto

        #  the crashdump feature.
        --enable-crashdump

        # Determines whether to use Gtk+ 3.0 vclplug on platforms where Gtk+ 3.0 is available.
        --enable-gtk3

        # Determines whether to build the OpenGL 3D slide transitions component.
        --enable-opengl

        # Determines whether to enable presentation mode screensaver control under GNOME via DBUS.
        --enable-dbus

        # Do not use the deprecated gnome-vfs, but use gvfs from gio instead
        --disable-gnome-vfs
        --enable-gio

        # Determines whether to enable Telepathy for collaboration
        --enable-telepathy

        # TODO: --enable-gstreamer      Enable building with the new gstreamer 1.0 avmedia backend
        # TODO: ?disable-gstreamer-0-10 Disable building the gstreamer avmedia backend

        # Increase build verbosity
        --enable-verbose

        # TODO: --enable-extra-gallery  Add extra gallery content.
        # TODO: --enable-extra-template Add extra template content.
        # TODO: --enable-extra-sample   Add extra sample content.
        # TODO: --enable-extra-font     Add extra font content.

        # Disable the build of the PostgreSQL-SDBC driver.
        --disable-postgresql-sdbc

        # Specify path to tarfiles manually.
        --with-external-tar="${KX_BASE}/../downloads/${KX_LIBREOFFICE}"

        # TODO: --without-fonts
        # LibreOffice includes some third-party fonts to provide a reliable basis for help content, templates, samples, etc.
        # When these fonts are already known to be available on the system then you should use this option.

        # Removes Postscript Printer definition files
        # Already included with CUPS
        --without-ppds 

        # TODO:  --without-afms
        # Removes bitmap font files from LibreOffice installation set,
        # for people building for specific distributions where AFM files or TrueType Fonts are known to be available.

        --with-system-cairo

        # Removes myspell dictionaries from LibreOffice
        --without-myspell-dicts

        # External directories
        --with-external-dict-dir=/opt/share/hunspell
        --with-external-hyph-dir=/opt/share/hyphen
        --with-external-thes-dir=/opt/share/thesaurus

        # Use installed system libraries and headers

        # TODO: use system rhino
        # However, LibreOffice uses an old rhino1_5R5
        # and patches heavily: libreoffice-4.0.0.1/rhino/rhino1_5R5*.patch
        # --with-system-rhino
        # --with-rhino-jar=/opt/share/java/js.jar

        --without-junit
        --without-java

-------------- next part --------------
[build LNK] Library/libmysqllo.so
S=/home/kaarpux/linux/build/opt/libreoffice-4.0.0.2 && O=$S/solver/unxlngx6.pro && W=$S/workdir/unxlngx6.pro &&  mkdir -p $W/LinkTarget/Library/ && g++ -shared -Wl,-z,noexecstack -flto   -Wl,-z,origin '-Wl,-rpath,$ORIGIN:$ORIGIN/../ure-link/lib' -Wl,-rpath-link,$O/lib -Wl,-z,defs  -fuse-linker-plugin -O2 -Wl,-rpath-link,/lib:/usr/lib -Wl,-z,combreloc  -L$S/solenv/unxlngx6/lib -L$O/lib -L$S/solenv/unxlngx6/lib -L//lib  -Wl,--hash-style=gnu  -Wl,--dynamic-list-cpp-new -Wl,--dynamic-list-cpp-typeinfo -Wl,-Bsymbolic-functions  -Wl,-O1 -Wl,-S  $W/CxxObject/connectivity/source/drivers/mysql/YDriver.o $W/CxxObject/connectivity/source/drivers/mysql/YTables.o $W/CxxObject/connectivity/source/drivers/mysql/YTable.o $W/CxxObject/connectivity/source/drivers/mysql/YViews.o $W/CxxObject/connectivity/source/drivers/mysql/YCatalog.o $W/CxxObject/connectivity/source/drivers/mysql/YColumns.o $W/CxxObject/connectivity/source/drivers/mysql/YUser.o $W/CxxObject/connectivity/source/drivers/mysql/YUsers.o $W/CxxObject/connectivity/source/drivers/mysql/Yservices.o     -Wl,--start-group  -Wl,--end-group -Wl,--no-as-needed   -luno_cppu -luno_cppuhelpergcc3 -luno_sal -ldbtoolslo -lcomphelpgcc3 -o $W/LinkTarget/Library/libmysqllo.so
/tmp/ccNHldod.ltrans2.ltrans.o:(.data.rel.ro._ZTIN12connectivity21ORowSetValueDecoratorE[_ZTIN12connectivity21ORowSetValueDecoratorE]+0x10): undefined reference to `typeinfo for salhelper::SimpleReferenceObject'
collect2: error: ld returned 1 exit status
make[2]: *** [/home/kaarpux/linux/build/opt/libreoffice-4.0.0.2/workdir/unxlngx6.pro/LinkTarget/Library/libmysqllo.so] Error 1


More information about the LibreOffice mailing list