Since digikam have been ported to windows, more export symbol macro have been added duing a lot of dll created during compilation process. Look export code from digiKam :<br><br><a href="http://websvn.kde.org/trunk/extragear/graphics/digikam/digikam/digikam_export.h?revision=869774&view=markup">http://websvn.kde.org/trunk/extragear/graphics/digikam/digikam/digikam_export.h?revision=869774&view=markup</a><br>
<br>We can see an export macro for:<br><br>- digiKam core,<br>- database interface code,<br>- image editor,<br>- image filters (I supose it's shared by digiKam and showfoto)<br>- widgets (idem)<br><br>More comments must be set in this code to identify where we must use the right macro in digiKam code, especially for new implementations.<br>
<br>Gilles<br><br><div class="gmail_quote">2008/10/25 Marcel Wiesweg <span dir="ltr"><<a href="mailto:marcel.wiesweg@gmx.de">marcel.wiesweg@gmx.de</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">> Gilles asked me to send this mail to the ML...<br>
><br>
><br>
> Hi,<br>
><br>
> I used to program in python all the time, so I'm still quite confused by<br>
> the libs mechanism in C++.<br>
><br>
> I understand that some of the .o files are packed into library files (to<br>
> save space and make things easier) and some header files are stored<br>
> in /usr/include/digikam to actually access those libs from the program the<br>
> libs will be used in.<br>
><br>
> But what are those DIGIKAM_EXPORT macros for? They seem to be in nearly<br>
> every class although not every class seems to be exported into libs (or at<br>
> least no header files exist in /usr/include/digikam).<br>
><br>
> Do they signal gcc to pack those object files into libraries?<br>
> I found out that in the main CMakeLists.txt (in digikam root) there are a<br>
> lot of libs defined, but in the end only a few of them are actually<br>
> installed in /usr/lib. For example we define a libhaar, but I can't find it<br>
> anywhere.<br>
<br>
</div>This is a very valid question.<br>
Take CMakeLists.txt in the main project directory and digikam/CMakeList.txt in<br>
the digikam/ subdir.<br>
The former one defines a large number of "libs", like libcurves_SRCS,<br>
libdimg_SRCS, libdimgloaders_SRCS etc. These are indeed not really libs, but<br>
we just use this to package the huge list of source files in chunks. (They<br>
were libs, static libs, with KDE3 and automake, so the lib... prefix is there<br>
for historic reasons).<br>
<br>
Now on to digikam/CMakeList.txt. This one defines the real binary objects that<br>
we have: libdigikam, libdigikamdatabase and the digikam application binary<br>
(the kioslaves and showfoto binaries are defined in their own<br>
CMakeLists.txt). You see that we now use all the lib... defines from above to<br>
group the source files into these binaries.<br>
Now the layout here actually has a rationale:<br>
libdigikam is the base library and contains all code shared between digikam,<br>
showfoto, the ioslaves and the image plugins.<br>
libdigikamdatabase obviously contains database code. It depends on libdigikam<br>
and is used by digikam and the ioslaves, not by showfoto and the image<br>
plugins.<br>
Non-shared code is kept in the digikam binary.<br>
There is no source file compiled twice in either of the binaries, with a few<br>
small exceptions with digikam/showfoto.<br>
<br>
Now to your DIGIKAM_EXPORT question: Any code that is contained in a library<br>
and used from another binary must contain the DIGIKAM_EXPORT macro, or it<br>
will result in "undefined reference" errors when linking.<br>
So if code is contained in a library and does not carry the macro, it is not<br>
intended to be used publicly (e.g. ImageInfoCache in libs/database/).<br>
Code in an application binary, e.g. AlbumIconView, does not need the macro as<br>
it will never be linked in a shared lib.<br>
<font color="#888888"><br>
Marcel<br>
</font><div><div></div><div class="Wj3C7c"><br>
<br>
<br>
><br>
> Maybe those questions are stupid, but I want to understand completely what<br>
> we are doing here (in Cmake and in the code as well).<br>
> For example my histogrambox widget: I just used copy and paste for it,<br>
> because I didn't know what to do at this moment. So it has an EXPORT macro<br>
> in front of the class and it also becomes installed in /usr/include, but I<br>
> guess we don't need this widget the be accessed from outside of digiKam. So<br>
> I could remove it from the INSTALL rule in the CMake file. But if I do so,<br>
> do I have to remove the EXPORT macro as well or do I have to keep it.<br>
><br>
><br>
> Andi<br>
> _______________________________________________<br>
> Digikam-devel mailing list<br>
> <a href="mailto:Digikam-devel@kde.org">Digikam-devel@kde.org</a><br>
> <a href="https://mail.kde.org/mailman/listinfo/digikam-devel" target="_blank">https://mail.kde.org/mailman/listinfo/digikam-devel</a><br>
<br>
<br>
_______________________________________________<br>
Digikam-devel mailing list<br>
<a href="mailto:Digikam-devel@kde.org">Digikam-devel@kde.org</a><br>
<a href="https://mail.kde.org/mailman/listinfo/digikam-devel" target="_blank">https://mail.kde.org/mailman/listinfo/digikam-devel</a><br>
</div></div></blockquote></div><br>