I recently found myself trying to install fpylll on a machine with a more recent Cython version (holzfusion) and I ran into the linkage issue from #259.
It turns out that this issue is actually entirely because Cython did the wrong thing in the past (see this and this).
However, it is straightforward to force Cython to output functions with C++ linkage by setting the right macro (see this), and by then forcibly forward declaring the function with extern "C++" linkage. That's what this PR does.
The downside of this PR is it means that the callback functionality can't be called from C code anymore. Whilst I suspect that's of limited utility, we can fix that by forcing the callback helper function to have C linkage:
I recently found myself trying to install fpylll on a machine with a more recent Cython version (
holzfusion
) and I ran into the linkage issue from #259.It turns out that this issue is actually entirely because Cython did the wrong thing in the past (see this and this).
However, it is straightforward to force Cython to output functions with C++ linkage by setting the right macro (see this), and by then forcibly forward declaring the function with
extern "C++"
linkage. That's what this PR does.The downside of this PR is it means that the callback functionality can't be called from C code anymore. Whilst I suspect that's of limited utility, we can fix that by forcing the callback helper function to have C linkage:
But that feels super hacky.