If you want to make some corrections to the assembly for different platforms (or are not needed at all), the MiniSat interface is pretty nice. Keep in mind that it really is not supported anymore.
There is also Glucose , which shares the MiniSat interface and is relatively actively supported. He also performs much better in SAT competitions than MiniSat.
Before choosing one or the other, you need to understand that although Glucose usually wins MiniSat in SAT competitions, your use case may not solve SAT competitions. As an example, our project usually generates executable formulas, where the task is to find one of the (usually) many SAT prescriptions, and MiniSat usually outperforms Glucose. OTOH, if your project basically generates unsatisfactory formulas or formulas with one solution found, glucose is likely to be better because it is optimized to quickly search for UNSAT evidence rather than determining SAT prescriptions.
Another solver I encountered with the implementation is CryptoMiniSat . It has a reasonable C ++ interface and is very actively supported. When I had a problem or error, it usually was fixed after a week. However, it rarely provides stable releases, so if you use it, you will most likely end up with your own hash rather than the correct release.
One more note: Glucose offers a parallel solver, but with a rather interesting license. CMSat provides a parallel solver under the MIT license. MiniSat has a very liberal license, but does not have a parallel version.
source share