On Tuesday, 9 July 2013 at 19:02:09 UTC, Kevin McTaggart wrote:
Does anyone know of a good D linear algebra library for Win64? I tried scid a year ago and liked it on Win32, but have been unable to get it to link on Win64. When trying to run scid on Win64, I've been using prebuilt LAPACK 3.4.1 libraries from http://icl.cs.utk.edu/lapack-for-windows/lapack/, but have unresolved external symbol dgesv_

You can try this:

/*
1. Create ABC.DEF with MS-NOTEPAD
------------ cut ---------------
LIBRARY LIBLAPACK.DLL
EXPORTS
dgesv_
------------ cut ---------------

2. Create ABC.LIB with MS-LIB
"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\Bin\amd64\lib.EXE" /DEF:ABC.DEF /MACHINE:X64 /OUT:ABC.LIB

3. Compile & link
dmd -m64 test1.d ABC.lib

4. Run
test1.exe
The solution is -0.661082 9.456125 -16.014625
*/

import std.stdio;

extern(System) void dgesv_(const(int)* N, const(int)* nrhs, double* A, const(int)* lda,
        int* ipiv, double* b, const(int)* ldb, int* info);

void main()
{
    /* 3x3 matrix A
     * 76 25 11
     * 27 89 51
     * 18 60 32
     */
    double A[9] = [76, 27, 18, 25, 89, 60, 11, 51, 32];
    double b[3] = [10, 7, 43];

    int N = 3;
    int nrhs = 1;
    int lda = 3;
    int ipiv[3];
    int ldb = 3;
    int info;

    dgesv_(&N, &nrhs, A.ptr, &lda, ipiv.ptr, b.ptr, &ldb, &info);

    if (info == 0) /* succeed */
                writefln("The solution is %f %f %f", b[0], b[1], b[2]);
    else
                writefln("dgesv_ fails %d", info);

}

Reply via email to