[Kde-games-devel] What defines __KDE_HAVE_GCC_VISIBILITY? was: Build system changes: new library libkdegamesprivate

Ian Wadham iandw.au at gmail.com
Sat May 19 04:13:41 UTC 2012


On 13/05/2012, at 6:58 AM, Stefan Majewsky wrote:
> On Sun, May 6, 2012 at 6:55 AM, Ian Wadham <iandw.au at gmail.com> wrote:
>> I am seriously held up by this and that means that Avnee and Roney will
>> soon be held up, too.
> 
> Fixed now?

No, it *was* not.  And I have just lost two more days … :-(  However, I have beaten
the build into submission and now I am compiling and building on Apple again.

The problem was that the macros KDEGAMES_EXPORT and KDE_EXPORT
evaluated to null strings in my system.  Consequently, although libkdegames
would compile and build, none of the symbols were visible to any of the games
programs or dependent libraries, so I was continually getting undefined symbols
when linking.

KDE_EXPORT is defined in <prefix>/include/kdemacros.h by:

#ifdef __KDE_HAVE_GCC_VISIBILITY
#define KDE_NO_EXPORT __attribute__ ((visibility("hidden")))
#define KDE_EXPORT __attribute__ ((visibility("default")))
#define KDE_IMPORT __attribute__ ((visibility("default")))
#elif defined(_WIN32) || defined(_WIN64)
#define KDE_NO_EXPORT
#define KDE_EXPORT __declspec(dllexport)
#define KDE_IMPORT __declspec(dllimport)
#else
#define KDE_NO_EXPORT
#define KDE_EXPORT
#define KDE_IMPORT
#endif

Somehow __KDE_HAVE_GCC_VISIBILITY was not defined in my system, although
__GNUC__ evaluates to 4.  So where, in KDE, is __KDE_HAVE_GCC_VISIBILITY
defined (it is not in kdemacros.h)?  And, if there is neither GCC visibility nor Windows,
should not KDE_EXPORT evaluate to some sensible default or something uncompileable?

My "fix" has been to use "add_definitions (-D__KDE_HAVE_GCC_VISIBILITY)" in
kdegames/CMakeLists.txt, but that is obviously not portable.

Any ideas?

Cheers, Ian W.


More information about the kde-games-devel mailing list