[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-devel
Subject:    Re: Custom EXPORT macro won't expand when included outside lib
From:       Sandro Andrade <sandroandrade () kde ! org>
Date:       2012-09-11 4:41:38
Message-ID: CAAnOZvXWqgiYT4c0-vpdY4_Rw8YejniAFETKE-n_Qvm7+sB3Gg () mail ! gmail ! com
[Download RAW message or body]

On Mon, Sep 10, 2012 at 9:29 PM, Luiz Romário Santana Rios
<luizromario@gmail.com> wrote:
> Hi.
>
> So, I recently started to write a "pluggable" library. You can check it from
> here:
> http://quickgit.kde.org/index.php?p=scratch%2Fromariorios%2Flibkodri.git&a=summary
> .
>
> It was all good until I tried to write a dummy plugin for it (currently
> available in the dummy_packagesource branch of the above repo). It was a
> pretty trivial plugin, it just implemented the pure virtual functions from
> the interface. But I kept getting this error:
>
> [100%] Building CXX object
> packagesources/CMakeFiles/kodri_packagesource_dummy.dir/dummypackagesource.o
> In file included from
> /home/kde4/kde-master-install/include/kodri/abstractpackagesource.h:29:0,
>                  from
> /home/kde4/kdesrc/libkodri/packagesources/dummypackagesource.h:23,
>                  from
> /home/kde4/kdesrc/libkodri/packagesources/dummypackagesource.cpp:20:
> /home/kde4/kde-master-install/include/kodri/version.h:31:28: error: expected
> initializer before ‘:’ token
> /home/kde4/kdesrc/libkodri/packagesources/dummypackagesource.cpp:1381:1:
> error: expected ‘}’ at end of input
> make[2]: **
> [packagesources/CMakeFiles/kodri_packagesource_dummy.dir/dummypackagesource.o]
> Erro 1
> make[1]: ** [packagesources/CMakeFiles/kodri_packagesource_dummy.dir/all]
> Erro 2
> make: ** [all] Erro 2
>
> I then suspected that the KODRI_EXPORT macro wasn't being expanded when the
> exported classes were included outside the library. Then I manually replaced
> KODRI_EXPORT by __attribute__ ((visibility("default")) and, as I suspected,
> the error vanished. Of course, other errors appeared afterwards, but I'll
> try to solve them later.
>
> My question is: why doesn't the macro expand? I followed the techbase
> tutorial on creating new libraries step by step, so I can't see where I got
> it wrong.

It doesn't expand because you have a wrong kodri_export.h:

#ifndef KODRI_EXPORT
# if defined(MAKE_KODRI_LIB)
#  define KODRI_EXPORT KDE_EXPORT
# else
#  define KODRI_IMPORT KDE_IMPORT
# endif
#endif

It should be:

#ifndef KODRI_EXPORT
# if defined(MAKE_KODRI_LIB)
#  define KODRI_EXPORT KDE_EXPORT
# else
#  define KODRI_EXPORT KDE_IMPORT
# endif
#endif

Besides that, I'd rearrange CMakeLists.txt's in order to have lib and
plugin as sibling sub-CMakeLists.txt (or even as separated projects).
Find a possible refactoring at:

http://d01.megashares.com/dl/dTjbpUz/libkodri-refactored.tar.gz

Plugin's CMakeLists.txt also contains some errors:

target_link_libraries(kodri_packagesource_dummy ${KDE4_CORE_LIBS}
${KDE4_KODRI_LIBS})

The correct var is ${KDE4_KDECORE_LIBS}. ${KDE4_KODRI_LIBS} isn't
automatically generated
at all. You should write a cmake module in order to detect your library.

Sandro

>
> Best regards.
>
> --
> Luiz Romário Santana Rios
>
>
>>> Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe
>>> <<
>

>> Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic