LINPACK is a C++ library which solves systems of linear equations for a variety of matrix types and storage modes, for real or complex arithmetic, and for single or double precision, by Jack Dongarra, Jim Bunch, Cleve Moler, Pete Stewart.
LINPACK has officially been superseded by the LAPACK library. The LAPACK library uses more modern algorithms and code structure. However, the LAPACK library can be extraordinarily complex; what is done in a single LINPACK routine may correspond to 10 or 20 utility routines in LAPACK. This is fine if you treat LAPACK as a black box. But if you wish to learn how the algorithm works, or to adapt it, or to convert the code to another language, this is a real drawback. This is one reason I still keep a copy of LINPACK around.
The LINPACK routines are available in both real and complex arithmetic versions, and using single precision or double precision. In most cases, a given routine has a root name, such as GEFA, and a prefix is used to identify the arithmetic and precision. Thus,
Versions of LINPACK in various arithmetic precisions are available through the NETLIB web site.
The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.
LINPACK is available in a C version and a C++ version and a FORTRAN90 version and a MATLAB version.
LINPACK_C, a C++ library which solves linear systems using single precision complex arithmetic;
LINPACK_D, a C++ library which solves linear systems using double precision real arithmetic;
LINPACK_S, a C++ library which solves linear systems using single precision real arithmetic;
LINPACK_Z, a C++ library which solves linear systems using double precision complex arithmetic;
Original FORTRAN77 version by Jack Dongarra, Jim Bunch, Cleve Moler, Pete Stewart. C++ version by John Burkardt.
You can go up one level to the C++ source codes.