It looks like something is trying to invoke the 32 bit compiler, not the 64 bit compiler. Can you please post the entire output, including the command you used to invoke it.
On Monday, 2 January 2017 03:19:36 UTC+11, saurabh...@gmail.com wrote: > > Happy new year everyone. Just checked this on Go 1.7.4 and > MinGW x86_64-6.2.0-posix-seh-rt_v5-rev1 on my code and the problem stays > the same. > C:\Go\pkg\tool\windows_amd64\link.exe: running gcc failed: exit status 1 > C:/program files/mingw-w64/x86_64-6.2.0-posix-seh-rt_v5-rev1/mingw64/bin > /../lib/gcc/x86_64-w64-mingw32/6.2.0/../../../../x86_64-w64-mingw32/lib > /../lib/libntdll.a(dkbgs01971.o):(.idata$5+0x0): multiple definition of > `__imp_sqrt' > C:/program > files/mingw-w64/x86_64-6.2.0-posix-seh-rt_v5-rev1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/6.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libmsvcrt.a(dekes01190.o):(.idata$5+0x0): > > first defined here > C:/program > files/mingw-w64/x86_64-6.2.0-posix-seh-rt_v5-rev1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/6.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libntdll.a(dkbgs01966.o):(.idata$5+0x0): > > multiple definition of `__imp_pow' > C:/program > files/mingw-w64/x86_64-6.2.0-posix-seh-rt_v5-rev1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/6.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libmsvcrt.a(dekes01161.o):(.idata$5+0x0): > > first defined here > C:/program > files/mingw-w64/x86_64-6.2.0-posix-seh-rt_v5-rev1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/6.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: > > C:/program > files/mingw-w64/x86_64-6.2.0-posix-seh-rt_v5-rev1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/6.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libmsvcrt.a(dkbgs01971.o): > > illegal symbol index 116 in relocs > collect2.exe: error: ld returned 1 exit status > > > There is no problem on Linux (tried various distros). > > Best Regards, > Saurabh > > > On Wednesday, April 20, 2016 at 7:06:28 PM UTC-7, Dorival Pedroso wrote: >> >> Hi, >> >> I'm just wondering what is the cause of the following error (multiple >> definition of __something)? >> C:\Go\pkg\tool\windows_amd64\link.exe: running gcc failed: exit status 1 >> C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/lib/../lib/libntdll.a(dyyls01966.o):(.idata$5+0x0): >> >> multiple definition of `__imp_pow' >> >> This only happens on Windows10 but on Ubuntu/Linux. >> >> The Go code makes a call to LAPACK via a C interface as follows: >> package main >> >> /* >> #cgo CFLAGS: -O3 >> #cgo linux LDFLAGS: -lm -llapack -lgfortran -lblas >> #cgo windows LDFLAGS: -lm -llapack -lgfortran -lblas -LC:/GoslDeps/lib >> >> #include <stdlib.h> >> >> void dgesvd_(const char* jobu, const char* jobvt, const int* M, const >> int* N, double* A, const int* lda, double* S, double* U, const int* ldu, >> double* VT, const int* ldvt, double* work,const int* lwork, const int* >> info); >> >> int lapack_svd(double *U, double *S, double *Vt, long m_long, double *A) { >> int m = (int)(m_long); >> int info = 0; >> char job = 'A'; >> int lwork = 10*m; >> double* work = (double*)malloc(lwork*sizeof(double)); >> dgesvd_(&job, // JOBU >> &job, // JOBVT >> &m, // M >> &m, // N >> A, // A >> &m, // LDA >> S, // S >> U, // U >> &m, // LDU >> Vt, // VT >> &m, // LDVT >> work, // WORK >> &lwork, // LWORK >> &info); // INFO >> free(work); >> return info; >> } >> */ >> import "C" >> >> import ( >> "fmt" >> "math" >> "unsafe" >> ) >> >> func main() { >> A := []float64{1, 2, 3, 2, -4, -9, 3, 6, -3} // col-major format >> m := int(math.Sqrt(float64(len(A)))) >> I := func(i, j int) int { return j*m + i } >> printmat(m, A, "A") >> U := make([]float64, len(A)) >> S := make([]float64, len(A)) >> Vt := make([]float64, len(A)) >> info := C.lapack_svd( >> (*C.double)(unsafe.Pointer(&U[0])), >> (*C.double)(unsafe.Pointer(&S[0])), >> (*C.double)(unsafe.Pointer(&Vt[0])), >> (C.long)(m), >> (*C.double)(unsafe.Pointer(&A[0])), >> ) >> fmt.Printf("SVD: info = %d\n", info) >> USVt := make([]float64, len(A)) >> for i := 0; i < m; i++ { >> for j := 0; j < m; j++ { >> for k := 0; k < m; k++ { >> USVt[I(i, j)] += U[I(i, k)] * S[k] * Vt[I(k, j)] >> } >> } >> } >> printmat(m, USVt, "U*S*Vt") >> } >> >> func printmat(m int, M []float64, msg string) { >> fmt.Printf("%s =\n", msg) >> for i := 0; i < m; i++ { >> for j := 0; j < m; j++ { >> fmt.Printf("%13.8f", M[j*m+i]) >> } >> fmt.Println() >> } >> } >> >> Any help is much appreciated. >> >> Cheers. >> Dorival >> > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.