[kde-edu]: KDE_EXPORT in libkdeedu (long)

Jason Harris kstars at 30doradus.org
Tue Mar 8 21:07:27 CET 2005


At work I am running KDE-3.3.1 and gcc-3.4.2 on Fedora Core 3.  I have noticed 
that with this combination, I cannot compile kdeedu from HEAD, because I get 
"visibility" errors in libkdeedu, due to the use of the "KDE_EXPORT" macro.

After some searching, I think I have narrowed down the problem.  In KDE-3.3.1, 
the kdemacros.h file contains:

#if __GNUC__ - 0 > 3 || (__GNUC__ - 0 == 3 && __GNUC_MINOR__ - 0 > 2)
#define KDE_NO_EXPORT __attribute__ ((visibility("hidden")))
#define KDE_EXPORT __attribute__ ((visibility("visible")))
#define KDE_EXPORT

Whereas, it has since been changed to:

#if __GNUC__ - 0 > 3 || (__GNUC__ - 0 == 3 && __GNUC_MINOR__ - 0 > 4)
/* Visibility is available for GCC newer than 3.4.
 * See: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9283 
#define KDE_NO_EXPORT __attribute__ ((visibility("hidden")))
#define KDE_EXPORT __attribute__ ((visibility("default")))
#elif defined(Q_WS_WIN)
#define KDE_EXPORT __declspec(dllexport)
#define KDE_EXPORT

So, KDE_EXPORT used to mean visibility="visible", and it now means 
visibility="default".  My compile error states that 'visibility must be one 
of "default",  "hidden", "protected" or "internal" ', because it's picking up 
the deprecated(?) "visible" definition of KDE_EXPORT.  

I have read that this is fixed in KDE-3.3.2, so maybe it isn't worth fixing 
and we should simply tell any users who complain about this to upgrade to 
3.3.2 or newer.  However, I have implemented a workaround in my local copies 
of libkdeedu/kdeeduplot and libkdeedu/extdate.  In pertinent header files, I 
placed the following:

#if __GNUC__ - 0 > 3 || (__GNUC__ - 0 == 3 && __GNUC_MINOR__ - 0 > 3)
#define KSTARS_NO_EXPORT __attribute__ ((visibility("hidden")))
#define KSTARS_EXPORT __attribute__ ((visibility("default")))

and then replaced all instances of "KDE_EXPORT" with "KSTARS_EXPORT".  Note 
that this not only fixes the deprecated visibility flag ("visible" -> 
"default"), it also modifies the GNUC_MINOR check from ">4" to ">3".  I 
changed this because my GNUC_MINOR is not >4 (I have gcc-3.4.2), yet it knows 
about visibility.

Do you think it is worth applying a patch like this?  I would like my app to 
be usable by any version of KDE-3.3.x, not just >=KDE-3.3.2.  I believe this 
is the only issue preventing it.

Also, do you think that the GNUC_MINOR check in kdemacros is in error?  I 
don't know anything about this visibility stuff, all I know is what my 
gcc-3.4.2 compiler is telling me...

KStars: KDE Desktop Planetarium

More information about the kde-edu mailing list