fplll / fpylll

A Python interface for https://github.com/fplll/fplll
GNU General Public License v2.0
118 stars 60 forks source link

Force C++ linkage everywhere #266

Closed joerowell closed 7 months ago

joerowell commented 7 months ago

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:

"""
extern "C" {
"""

cdef public void....

"""
}
"""

But that feels super hacky.

joerowell commented 7 months ago

@malb I haven't yet been able to test this on a lower Cython version, but I'm doing so right now. I'll let you know how it goes either way.

EDIT It works well here on Cython 0.29.3.

malb commented 7 months ago

Ace!!