[QScintilla] Why do header files force C++ linkage on Macs?
Phil Thompson
phil at riverbankcomputing.com
Thu May 19 18:16:04 BST 2016
On 17 May 2016, at 2:16 pm, Marcus Calhoun-Lopez <mcalhoun at macports.org> wrote:
>
> Greetings.
>
> I am trying to resolve an issue installing GNU Octave with the MacPorts system.
>
> Octave includes qscilexeroctave.h, which includes a whole bunch of other files until it gets to a header file from Gnulib.
> Gnulib attempts to add a security warning to the C functions gets.
> Because qscilexeroctave.h wraps everything in “extern "C++",” there is a conflict between the linkages of gets (C vs C++).
>
> A few solutions have been proposed in the various discussions about this problem (see references below).
> On solution is to remove the “extern "C++"” from the Qt4Qt5/Qsci/*.h qscintilla header files:
>
> -#ifdef __APPLE__
> -extern "C++" {
> -#endif
> ...
> -#ifdef __APPLE__
> -}
> -#endif
>
> For me, qscintilla and Octave both build fine after the change.
>
> Is this a safe change?
> Any insight into why forcing C++ linkage is necessary (but just on Macs) would be appreciated.
They were needed to work around a problem with the Qt binary installers circa 2007.
> Is this a change that can be considered upstream?
I'll add it to the TODO list.
Phil
More information about the QScintilla
mailing list