Code: Select all
__ZN3irr4core11utf8ToWcharEPKcPwm
I checked the exported symbols from an irrlicht static library, and the exported symbols from utf8.o are
Code: Select all
0000000000000000 T __ZN3irr4core11utf8ToWcharEPKcPwy
0000000000000257 T __ZN3irr4core11wcharToUtf8EPKwPcy
Code: Select all
__ZN3irr4core11utf8ToWcharEPKcPwm
Putting those symbols through a demangler, it shows that the one that is exported translates to
Code: Select all
_irr::core::utf8ToWchar(char const*, wchar_t*, unsigned long long)
Code: Select all
_irr::core::utf8ToWchar(char const*, wchar_t*, unsigned long)
This shows that the u64 and s64 types aren't consistent inside irrlicht itself, and highly probably could cause issues even when linking with programs using the library.
The issue arises when depending on the headers included beforehand, the check
Code: Select all
#elif defined(__GNUC__)
#if defined(__WORDSIZE) && __WORDSIZE == 64
typedef unsigned long int u64;
#else
__extension__ typedef unsigned long long u64;
#endif
Code: Select all
__WORDSIZE
Code: Select all
typedef unsigned long int
Code: Select all
typedef unsigned long int
I'm not sure if in the case of CIrrDeviceOSX.mm the header inclusion is caused by some of my modifications, but regardless of that, this happens for example when compiling the sources of the bundled aesGladman (a quick way to test this, is to remove the definition as unsigned long int or put ill formatted code inside that define, and then the code will fail to build), and as i said before, this could lead to linking issues with the various programs.
The way to fix this would be to change the logic to choose the typedef for 64 bit integers and especially not use the compiler reserved flags (with __WORDSIZE being one of them) to determine them.
Needless to say that this would be a highly possible abi breaking change on non windows systems.