Seems like even that does not seem to work. Please see: amandeep@s113ldom1:/opt/go_pkgs/src/github.com/golang/glog$ sudo GOPATH=/opt/go_pkgs CGO_CFLAGS='-m64' CGO_LDFLAGS='-m64' go install -x -gccgoflags=-m64 WORK=/tmp/go-build357879094 mkdir -p $WORK/b001/ cd $WORK /usr/gnu/bin/gccgo -fgo-importcfg=/dev/null -c -x c - || true cd /opt/go_pkgs/src/github.com/golang/glog /usr/gnu/bin/gccgo -c -g -fdebug-prefix-map=$WORK=/tmp/go-build -gno-record-gcc-switches -fgo-pkgpath=github.com/golang/glog -o $WORK/b001/_go_.o -I $WORK/b001/_importcfgroot_ -m64 ./glog.go ./glog_file.go echo ' .section .go.buildid,"e"' >> $WORK/b001/_buildid.s echo ' .byte 0x64,0x71,0x65,0x31,0x73,0x55,0x39,0x39' >> $WORK/b001/_buildid.s echo ' .byte 0x62,0x56,0x7a,0x36,0x52,0x57,0x35,0x74' >> $WORK/b001/_buildid.s echo ' .byte 0x64,0x55,0x59,0x4f,0x2f,0x64,0x71,0x65' >> $WORK/b001/_buildid.s echo ' .byte 0x31,0x73,0x55,0x39,0x39,0x62,0x56,0x7a' >> $WORK/b001/_buildid.s echo ' .byte 0x36,0x52,0x57,0x35,0x74,0x64,0x55,0x59' >> $WORK/b001/_buildid.s echo ' .byte 0x4f' >> $WORK/b001/_buildid.s echo '' >> $WORK/b001/_buildid.s /usr/gnu/bin/gccgo -xassembler-with-cpp -I $WORK/b001/ -c -o $WORK/b001/_buildid.o -D GOOS_solaris -D GOARCH_sparc -D GOPKGPATH=github_com_golang_glog $WORK/b001/_buildid.s ar rcD $WORK/b001/_pkg_.a $WORK/b001/_go_.o $WORK/b001/_buildid.o /usr/gnu/libexec/gcc/sparc-sun-solaris2.11/8.2.1/buildid -w $WORK/b001/_pkg_.a # internal cp $WORK/b001/_pkg_.a /root/.cache/go-build/9d/9de1b3b9dc941395e2c0ba0bd363f9af9f8dc5c62c84b2d248c274ba14a2bcd7-d # internal mkdir -p /opt/go_pkgs/pkg/gccgo_solaris_sparc/github.com/golang/ cp $WORK/b001/_pkg_.a /opt/go_pkgs/pkg/gccgo_solaris_sparc/github.com/golang/libglog.a rm -r $WORK/b001/ amandeep@s113ldom1:/opt/go_pkgs/src/github.com/golang/glog$ file /opt/go_pkgs/pkg/gccgo_solaris_sparc/github.com/golang/libglog.a /opt/go_pkgs/pkg/gccgo_solaris_sparc/github.com/golang/libglog.a: current ar archive, 32-bit symbol table
In the above output, I can see that -m64 flag is being passed to gcc, but somehow does not seem to apply everywhere (one of the gccgo invocation does not have -m64 flag). I tried to look at the generated archive and one of the members is still 32bit MSB executable. Please look: amandeep@s113ldom1:~/workspace$ ar -t /opt/go_pkgs/pkg/gccgo_solaris_sparc/github.com/golang/libglog.a _go_.o _buildid.o amandeep@s113ldom1:~/workspace$ ar -xv /opt/go_pkgs/pkg/gccgo_solaris_sparc/github.com/golang/libglog.a ./_go_.o ./_buildid.o x - _go_.o x - _buildid.o amandeep@s113ldom1:~/workspace$ file ./_buildid.o ./_buildid.o: ELF 32-bit MSB relocatable SPARC Version 1 amandeep@s113ldom1:~/workspace$ file ./_go_.o ./_go_.o: ELF 64-bit MSB relocatable SPARCV9 Version 1 Could that be the reason? I also tried providing GOARCH=sprac64 flag to see if that helps, but it didn't. Similar output, just the file is generated in a different folder. Please see: amandeep@s113ldom1:/opt/go_pkgs/src/github.com/golang/glog$ sudo GOPATH=/opt/go_pkgs CGO_CFLAGS='-m64' CGO_LDFLAGS='-m64' GOARCH=sparc64 CGO_ENABLED=1 go install -x -gccgoflags=-m64 WORK=/tmp/go-build328208181 mkdir -p $WORK/b001/ cd $WORK /usr/gnu/bin/gccgo -fgo-importcfg=/dev/null -c -x c - || true cd /opt/go_pkgs/src/github.com/golang/glog /usr/gnu/bin/gccgo -c -g -fdebug-prefix-map=$WORK=/tmp/go-build -gno-record-gcc-switches -fgo-pkgpath=github.com/golang/glog -o $WORK/b001/_go_.o -I $WORK/b001/_importcfgroot_ -m64 ./glog.go ./glog_file.go echo ' .section .go.buildid,"e"' >> $WORK/b001/_buildid.s echo ' .byte 0x79,0x71,0x58,0x37,0x74,0x64,0x76,0x6c' >> $WORK/b001/_buildid.s echo ' .byte 0x7a,0x59,0x53,0x39,0x41,0x6a,0x30,0x58' >> $WORK/b001/_buildid.s echo ' .byte 0x34,0x53,0x78,0x39,0x2f,0x79,0x71,0x58' >> $WORK/b001/_buildid.s echo ' .byte 0x37,0x74,0x64,0x76,0x6c,0x7a,0x59,0x53' >> $WORK/b001/_buildid.s echo ' .byte 0x39,0x41,0x6a,0x30,0x58,0x34,0x53,0x78' >> $WORK/b001/_buildid.s echo ' .byte 0x39' >> $WORK/b001/_buildid.s echo '' >> $WORK/b001/_buildid.s /usr/gnu/bin/gccgo -xassembler-with-cpp -I $WORK/b001/ -c -o $WORK/b001/_buildid.o -D GOOS_solaris -D GOARCH_sparc64 -D GOPKGPATH=github_com_golang_glog $WORK/b001/_buildid.s ar rcD $WORK/b001/_pkg_.a $WORK/b001/_go_.o $WORK/b001/_buildid.o /usr/gnu/libexec/gcc/sparc-sun-solaris2.11/8.2.1/buildid -w $WORK/b001/_pkg_.a # internal cp $WORK/b001/_pkg_.a /root/.cache/go-build/a4/a47820a6bcb6e72c26a3be36129e80b12a0f0193dd5959e2c7304a3b169d9af8-d # internal mkdir -p /opt/go_pkgs/pkg/gccgo_solaris_sparc64/github.com/golang/ cp $WORK/b001/_pkg_.a /opt/go_pkgs/pkg/gccgo_solaris_sparc64/github.com/golang/libglog.a rm -r $WORK/b001/ amandeep@s113ldom1:/opt/go_pkgs/src/github.com/golang/glog$ file /opt/go_pkgs/pkg/gccgo_solaris_sparc64/github.com/golang/libglog.a /opt/go_pkgs/pkg/gccgo_solaris_sparc64/github.com/golang/libglog.a: current ar archive, 32-bit symbol table I also gave compiling the helloworld file a try with this newly generated lib (with different flags) but the compilation still faces the previous problem. Did I miss something? Please let me know. Regards, Aman On Thursday, September 27, 2018 at 10:25:01 PM UTC-7, Ian Lance Taylor wrote: > > On Thu, Sep 27, 2018 at 5:34 PM, <aman...@cohesity.com <javascript:>> > wrote: > > Yes, this works for a simple program I have. Now I modified the > helloworld > > to use glog as follows: > > > > package main > > > > import ( > > "fmt" > > "github.com/golang/glog" > > ) > > > > func main() { > > fmt.Println("Hello world....") > > glog.Info("Hello world...") > > } > > > > But now I get another error from libglog.a: > > > > amandeep@s113ldom1:~/workspace$ go build -gccgoflags=-m64 helloworld.go > > # command-line-arguments > > ld: warning: file > > /opt/go_pkgs/pkg/gccgo_solaris_sparc/github.com/golang/libglog.a(_go_.o): > > > wrong ELF class: ELFCLASS32 > > Undefined first referenced > > symbol in file > > github_com_golang_glog..import $WORK/b001/_pkg_.a(_go_.o) > > github_com_golang_glog.Info $WORK/b001/_pkg_.a(_go_.o) > > ld: fatal: symbol referencing errors > > collect2: error: ld returned 1 exit status > > > > So, I thought recompiling glog with 64 bit option would help. None of > the > > following helped: > > > > sudo GOPATH=/opt/go_pkgs/ CGO_LDFLAGS='-m64' go install > > sudo GOPATH=/opt/go_pkgs/ go install -gccgoflags '-m64' > > sudo GOPATH=/opt/go_pkgs/ go install -gccgoflags='-m64' > > > > All of these generate the following: > > > > amandeep@s113ldom1:/opt/go_pkgs/src/github.com/golang/glog$ file > > /opt/go_pkgs/pkg/gccgo_solaris_sparc/github.com/golang/libglog.a > > /opt/go_pkgs/pkg/gccgo_solaris_sparc/github.com/golang/libglog.a: > > current ar archive, 32-bit symbol table > > For a package that uses cgo, you'll need to use -gccgoflags=-m64 and > also set both CGO_CFLAGS and CGO_LDFLAGS to -m64. > > Ian > > > > > On Thursday, September 27, 2018 at 3:01:12 PM UTC-7, Ian Lance Taylor > wrote: > >> > >> On Thu, Sep 27, 2018 at 2:57 PM, Amandeep Gautam > >> <amandee...@gmail.com> wrote: > >> > Hi, > >> > I am trying to compile a 64bit executable using gccgo on Solaris > >> > 11/10. > >> > Following is what I have tried: > >> > > >> > CGO_LDFLAGS='-m64' go build hello_world.go > >> > GOARCH=sparc64 CGO_LDFLAGS='-m64' go build hello_world.go > >> > > >> > Below is the output of the first command: > >> > > >> > amandeep@s113ldom1:~/workspace$ CGO_LDFLAGS='-m64' go build pqrs.go > >> > # command-line-arguments > >> > ld: warning: file $WORK/b001/_pkg_.a(_go_.o): wrong ELF class: > >> > ELFCLASS32 > >> > Undefined first referenced > >> > symbol in file > >> > main.main > >> > > /usr/gnu/lib/gcc/sparc-sun-solaris2.11/8.2.1/../../../sparcv9/libgo.so > >> > __go_init_main > >> > > /usr/gnu/lib/gcc/sparc-sun-solaris2.11/8.2.1/../../../sparcv9/libgo.so > >> > ld: fatal: symbol referencing errors > >> > collect2: error: ld returned 1 exit status > >> > > >> > However, I am able to generate 64 bit executable for c++ helloworld > >> > using > >> > just gcc, so I am hoping it boils down to passing the right set of > >> > flags. > >> > For example: > >> > > >> > amandeep@s113ldom1:~/workspace$ /usr/gnu/bin/gcc -m64 helloworld.c > >> > amandeep@s113ldom1:~/workspace$ file ./a.out > >> > ./a.out: ELF 64-bit MSB executable SPARCV9 Version 1, > dynamically > >> > linked, not stripped, no debugging information available > >> > amandeep@s113ldom1:~/workspace$ file /usr/gnu/bin/gcc > >> > /usr/gnu/bin/gcc: ELF 32-bit MSB executable SPARC32PLUS Version > 1, > >> > V8+ > >> > Required, dynamically linked, not stripped > >> > > >> > How would you compile a 64 bit executable for Solaris using gccgo? > >> > >> CGO_LDFLAGS only affects your program if it actually uses cgo. > >> > >> Does it work to do > >> go build -gccgoflags=-m64 > >> ? > > > > > > -- > > 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...@googlegroups.com <javascript:>. > > For more options, visit https://groups.google.com/d/optout. > -- 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.