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.

Reply via email to