--
You received this message because you are subscribed to the Google Groups "gonum-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to gonum-dev+...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Hi Dan,OK. I think I've narrowed it down somewhat. I can build this w/o errors:------------------------------------------------------package main
import ("fmt""log"
)
func main() {m := mat64.NewDense(2, 3, []float64{3, 1, 1,-1, 3, 1,})fmt.Printf("m =\n %0.4v\n", mat64.Formatted(m, mat64.Prefix(" ")))var u mat64.Densevar svd mat64.SVDif ok := svd.Factorize(m, matrix.SVDFull); !ok {log.Fatalf("SVD factorization of 'm' failed")}u.UFromSVD(&svd)fmt.Printf("U =\n %0.4v\n", mat64.Formatted(&u, mat64.Prefix(" ")))var v mat64.Densev.VFromSVD(&svd)fmt.Printf("V =\n %0.4v\n", mat64.Formatted(&v, mat64.Prefix(" ")))values := svd.Values(nil)for i := range values {fmt.Printf("\nEigenvalue %d: %4.2f\n", i, values[i])}}------------------------------------------------------
But here's the kicker: if I try to build this program:------------------------------------------------------
package main
import ("fmt""math/cmplx""math/rand""time"
)
func main() {ran := rand.New(rand.NewSource(time.Now().UTC().UnixNano()))const N = 4 // Square matrix dimensionrans := make([]complex128, N*N)for i := 0; i < len(rans); i++ {rans[i] = complex(ran.NormFloat64(), ran.NormFloat64())}jobvl := lapack.Job('V')jobvr := lapack.Job('V')n, lda, ldvl, lvdr := N, N, N, Na := make([]complex128, N*N)for i := 0; i < len(rans); i++ {a[i] = rans[i]}showMatrix("Working matrix", a, N)w := make([]complex128, N)vl := make([]complex128, N*N)vr := make([]complex128, N*N)clapack.Zgeev(jobvl, jobvr, n, a, lda, w, vl, ldvl, vr, lvdr)showMatrix("Left Eigenvectors", vl, N)showMatrix("Right Eigenvectors", vr, N)showMatrix("Eigenvalues", w, N)fmt.Println("\nAbs[eigenvalues]:")for i := range w {fmt.Printf("%4.2g\t", cmplx.Abs(w[i]))}fmt.Println()}
func showMatrix(label string, m []complex128, cols int) {fmt.Printf("\n%s:\n", label)for i := range m {fmt.Printf("%4.2g\t", m[i])if (i+1)%cols == 0 {fmt.Printf("\n")}}}------------------------------------------------------
Using this command line:CGO_LDFLAGS="-L/home/dmazzoni/Downloads/OpenBLAS -lopenblas" go build -x zgeev.go
I get this:------------------------------------------------------
WORK=/tmp/go-build785391885mkdir -p $WORK/github.com/gonum/lapack/cgo/clapack/_obj/mkdir -p $WORK/github.com/gonum/lapack/cgo/cd /home/dmazzoni/Projects/Golang/src/github.com/gonum/lapack/cgo/clapackCGO_LDFLAGS="-L/home/dmazzoni/Downloads/OpenBLAS" "-lopenblas" /usr/local/go/pkg/tool/linux_amd64/cgo -objdir $WORK/github.com/gonum/lapack/cgo/clapack/_obj/ -importpath github.com/gonum/lapack/cgo/clapack -- -I $WORK/github.com/gonum/lapack/cgo/clapack/_obj/ -g -O2 clapack.gogcc -I . -fPIC -m64 -pthread -fmessage-length=0 -I $WORK/github.com/gonum/lapack/cgo/clapack/_obj/ -g -O2 -g -O2 -o $WORK/github.com/gonum/lapack/cgo/clapack/_obj/_cgo_main.o -c $WORK/github.com/gonum/lapack/cgo/clapack/_obj/_cgo_main.cgcc -I . -fPIC -m64 -pthread -fmessage-length=0 -I $WORK/github.com/gonum/lapack/cgo/clapack/_obj/ -g -O2 -g -O2 -o $WORK/github.com/gonum/lapack/cgo/clapack/_obj/_cgo_export.o -c $WORK/github.com/gonum/lapack/cgo/clapack/_obj/_cgo_export.cgcc -I . -fPIC -m64 -pthread -fmessage-length=0 -I $WORK/github.com/gonum/lapack/cgo/clapack/_obj/ -g -O2 -g -O2 -o $WORK/github.com/gonum/lapack/cgo/clapack/_obj/clapack.cgo2.o -c $WORK/github.com/gonum/lapack/cgo/clapack/_obj/clapack.cgo2.cgcc -I . -fPIC -m64 -pthread -fmessage-length=0 -o $WORK/github.com/gonum/lapack/cgo/clapack/_obj/_cgo_.o $WORK/github.com/gonum/lapack/cgo/clapack/_obj/_cgo_main.o $WORK/github.com/gonum/lapack/cgo/clapack/_obj/_cgo_export.o $WORK/github.com/gonum/lapack/cgo/clapack/_obj/clapack.cgo2.o -L/home/dmazzoni/Downloads/OpenBLAS -lopenblas/tmp/go-build785391885/github.com/gonum/lapack/cgo/clapack/_obj/clapack.cgo2.o: In function `_cgo_88e828dded3d_Cfunc_LAPACKE_cbbcsd':
../../github.com/gonum/lapack/cgo/clapack/clapack.go:81: undefined reference to `LAPACKE_cbbcsd'
....../tmp/go-build785391885/github.com/gonum/lapack/cgo/clapack/_obj/clapack.cgo2.o: In function `_cgo_88e828dded3d_Cfunc_LAPACKE_zupmtr':../../github.com/gonum/lapack/cgo/clapack/clapack.go:25567: undefined reference to `LAPACKE_zupmtr'
collect2: error: ld returned 1 exit status
------------------------------------------------------
# fetch cblas reference lib
curl http://www.netlib.org/blas/blast-forum/cblas.tgz | tar -zx
# make and install cblas
pushd CBLAS
sudo mv Makefile.LINUX Makefile.in
sudo BLLIB=/usr/lib/libopenblas.a make alllib
sudo mv lib/cblas_LINUX.a /usr/lib/libcblas.a
popd
popd
# fetch cblas reference lib
curl http://www.netlib.org/blas/blast-forum/cblas.tgz | tar -zx
# make and install cblas
pushd CBLAS
sudo mv Makefile.LINUX Makefile.in
sudo BLLIB=/home/dmazzoni/Downloads/OpenBLAS/libopenblas.a make alllib
sudo mv lib/cblas_LINUX.a /home/dmazzoni/Downloads/OpenBLAS/libcblas.a
popd
--
You received this message because you are subscribed to a topic in the Google Groups "gonum-dev" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/gonum-dev/tVIq2dTXoNM/unsubscribe.
To unsubscribe from this group and all its topics, send an email to gonum-dev+...@googlegroups.com.
Can you get the C program to compile when you dynamically link and make calls to the LAPACKE _work functions?
#include <stdio.h>
#include <lapacke.h>
int row_major = 101;
int main() {
int norm='O', uplo='U', n=3, lda=3;
double a[9]= {
89, 59, 77,
0,107, 59,
0, 0, 89
};
double res;
res = LAPACKE_dlansy(row_major, norm, uplo, n, a, lda);
printf("dlansy res=%f\n", res);
}
---------------------------------------------------------------------------------
Then I compiled and linked with this command line:
Please try with LAPACKE_dlansy replaced with LAPACKE_dlansy_work (the call will need to be adjusted - see how it is called in the lapacke package). We don't use calls to the non-work functions anymore, so it would be nice to know that you can get an identical
situation C to work.