Thank you Ian and Jake for the response.
Sure Ian, will go through it.

Thanks,
Nitish


On Thu, Mar 19, 2020 at 11:11 PM Ian Lance Taylor <i...@golang.org> wrote:

> It might help to read
> https://golang.org/cmd/go/#hdr-Package_lists_and_patterns, including
> the paragraph starting "As a special case, if the package list is a
> list of .go files from a single directory,...."
>
> Ian
>
> On Thu, Mar 19, 2020 at 8:59 AM Jake Montgomery <jake6...@gmail.com>
> wrote:
> >
> >
> >
> > On Thursday, March 19, 2020 at 10:21:31 AM UTC-4, Nitish Saboo wrote:
> >>
> >> Hi Jake,
> >>
> >> Is there some reason that you want, or need, to be using go build this
> way, by specifying files? Or is it just curiosity about how the tools work?
> >> >>There is no particular reason to use go build by specifying the
> files. I was trying different ways to compile the project and ended up with
> this scenario.
> >> I am curious to know the reason for this.
> >>
> >> The typical way to use go build is to build without specifying
> individual files. If you are using CGO, I would certainly recommend that
> you do it by building as a  package, just to keep things simple. Not that
> CGO is ever simple.
> >> >> I will try compiling the package without specifying the individual
> files.
> >
> >
> > Right, as I said, this is the standard way. You should always build the
> package this way, unless you have a specific use case that requires
> compiling a single file.
> >
> >> But the following case works all fine whether we pass the individual
> file or not.:
> >
> >
> > The reason that works is because the package you are building only
> contains one file, 'main.go'. The other files are actually in different
> packages, so they are pulled in by import. So `go build -v - x` builds the
> package `nitish`, which only contains one file, `main.go`. Since the
> package name is `nitish` you get an executable named `nitish`. `go build -v
> - x main.go` is a special use of the tool. I mostly use it for quick code
> tests, when the playground will not suffice, or for using go to write quick
> scripts. It will not build the package `nitish`, instead it will build only
> the single file, and produce an executable named after the file, in this
> case `main.exe`. Since the `nitish` package only contains one file, the
> result is otherwise the same (AFAIK).
> >
> > Hope this has some useful information.
> >>
> >>
> >> Case 1
> >> ----------
> >>
> >> I have a project called 'nitish' where the folder structure looks like
> the following:
> >>
> >> nitish
> >>        main.go
> >>        util
> >>             util.go
> >>        lib
> >>             node.c
> >>             node.h
> >>             a.go
> >>
> >> When I try compiling this project in the following ways:
> >>
> >> 1) go build -v - x
> >>
> >> >> This creates a binary called 'nitish'
> >>
> >> 2)  go build -v - x main.go
> >>
> >> >>  This creates a binary called 'main'
> >>
> >> ldd output of both the binaries is the same.
> >>
> >> Thanks,
> >> Nitish
> >>
> >>
> >> On Thu, Mar 19, 2020 at 7:18 PM Jake Montgomery <jake...@gmail.com>
> wrote:
> >>>
> >>> Nitish,
> >>>
> >>> Is there some reason that you want, or need, to be using go build this
> way, by specifying files? Or is it just curiosity about how the tools work?
> >>> The typical way to use go build is to build without specifying
> individual files. If you are using CGO, I would certainly recommend that
> you do it by building as a  package, just to keep things simple. Not that
> CGO is ever simple.
> >>>
> >>>
> >>> On Wednesday, March 18, 2020 at 10:27:19 AM UTC-4, Nitish Saboo wrote:
> >>>>
> >>>> Hi Gregor,
> >>>>
> >>>> Do you mean like this 'go build -v -x main.go node.c' ? But it does
> not compile and gives the following output:
> >>>>
> >>>> WORK=/tmp/go-build714119815
> >>>> named files must be .go files
> >>>>
> >>>> Thanks,
> >>>> Nitish
> >>>>
> >>>> On Wed, Mar 18, 2020 at 7:44 PM Gregor Best <be...@pferdewetten.de>
> wrote:
> >>>>>
> >>>>> Hi,
> >>>>>
> >>>>> it looks like my initial reply wasn't entirely correct. It should
> build if you pass in both the `.go` file and the `.c` file.
> >>>>>
> >>>>> On 18.03.20 15:02, Nitish Saboo wrote:
> >>>>>
> >>>>> Hi Gregor,
> >>>>>
> >>>>> nitish
> >>>>>        main.go
> >>>>>        node.c
> >>>>>        node.h
> >>>>>
> >>>>> I compiled using 'go build -v -x main.go'
> >>>>> But if my cgo directive is defined in main.go, this should have
> compiled successfully..right? But it fails with the following whereas 'go
> build -v -x' works fine.
> >>>>>
> >>>>> /tmp/go-build439591561/b001/_x002.o: In function
> `_cgo_5637ad3d75e4_Cfunc_load_pattern_db':
> >>>>> /tmp/go-build/cgo-gcc-prolog:86: undefined reference to
> `load_pattern_db'
> >>>>> collect2: error: ld returned 1 exit status
> >>>>>
> >>>>> package main
> >>>>>
> >>>>> //#include <stdlib.h>
> >>>>> //#include "node.h"
> >>>>> import "C"
> >>>>> import (
> >>>>> "fmt"
> >>>>> _ "fmt"
> >>>>> "os"
> >>>>> "path"
> >>>>> "unsafe"
> >>>>> )
> >>>>>
> >>>>> Please let me know what am I missing here?
> >>>>>
> >>>>> Thanks,
> >>>>> Nitish
> >>>>>
> >>>>> On Wed, Mar 18, 2020 at 7:20 PM Nitish Saboo <nitish...@gmail.com>
> wrote:
> >>>>>>
> >>>>>> Hi Gregor,
> >>>>>>
> >>>>>> Got your point.Thank you for your response.
> >>>>>> That explains why the binaries have different names post
> compilation.
> >>>>>>
> >>>>>> Thanks,
> >>>>>> Nitish
> >>>>>>
> >>>>>>
> >>>>>> On Wed, Mar 18, 2020 at 7:06 PM Gregor Best <be...@pferdewetten.de>
> wrote:
> >>>>>>>
> >>>>>>> Hi,
> >>>>>>>
> >>>>>>> In both `go build main.go`-examples, you tell the compiler to
> _only_ build `main.go`.
> >>>>>>>
> >>>>>>> In your first example, `main.go` probably imports both `util` and
> `lib` (you might want to give them less generic names by the way). The go
> compiler thus knows "to build `main.go`, I need to build both `util` and
> `lib` and link them in".
> >>>>>>>
> >>>>>>> In the second example, it has no way of knowing where
> `load_pattern_db` comes from, since you didn't tell it to compile a file
> that defines that function.
> >>>>>>>
> >>>>>>> The examples where you omit the `main.go` tell the compiler "build
> the package in this directory", which includes all `.go`-files in the
> directory. `node.c` and `node.h` are likely built because of `cgo`
> directives in `a.go`.
> >>>>>>>
> >>>>>>> The compiler and linker did exactly as you told them to.
> >>>>>>>
> >>>>>>> On 18.03.20 14:17, Nitish Saboo wrote:
> >>>>>>>
> >>>>>>> Hi,
> >>>>>>>
> >>>>>>> Case 1
> >>>>>>> ----------
> >>>>>>>
> >>>>>>> I have a project called 'nitish' where the folder structure looks
> like the following:
> >>>>>>>
> >>>>>>> nitish
> >>>>>>>        main.go
> >>>>>>>        util
> >>>>>>>             util.go
> >>>>>>>        lib
> >>>>>>>             node.c
> >>>>>>>             node.h
> >>>>>>>             a.go
> >>>>>>>
> >>>>>>> When I try compiling this project in the following ways:
> >>>>>>>
> >>>>>>> 1) go build -v - x
> >>>>>>>
> >>>>>>> >> This creates a binary called 'nitish'
> >>>>>>>
> >>>>>>> 2)  go build -v - x main.go
> >>>>>>>
> >>>>>>> >>  This creates a binary called 'main'
> >>>>>>>
> >>>>>>> ldd output of both the binaries is the same.
> >>>>>>>
> >>>>>>>
> >>>>>>> Case 2
> >>>>>>> ----------
> >>>>>>>
> >>>>>>> Now, when I restructure the project 'nitish' in the following
> manner:
> >>>>>>>
> >>>>>>> nitish
> >>>>>>>        main.go
> >>>>>>>        util.go
> >>>>>>>        node.c
> >>>>>>>        node.h
> >>>>>>>        a.go
> >>>>>>>
> >>>>>>> When I try compiling this project in the following ways:
> >>>>>>>
> >>>>>>> 1) go build -v - x
> >>>>>>>
> >>>>>>> >> This creates a binary called 'nitish'
> >>>>>>>
> >>>>>>> 2) go build -v - x main.go
> >>>>>>>
> >>>>>>> >> This error out with the following:
> >>>>>>>
> >>>>>>> /tmp/go-build074530518/b001/_x002.o: In function
> `_cgo_8eab385aa676_Cfunc_load_pattern_db':
> >>>>>>> /tmp/go-build/cgo-gcc-prolog:86: undefined reference to
> `load_pattern_db'
> >>>>>>> collect2: error: ld returned 1 exit status
> >>>>>>>
> >>>>>>>
> >>>>>>> 1) In Case 1, why the binaries are created with different names
> though both the binaries have the same 'ldd output' and work the same
> manner?
> >>>>>>>
> >>>>>>> 2) Why we see an error with the command 'go build -v - x main.go'
> in Case 2 but not in Case 1?
> >>>>>>>
> >>>>>>> Thanks,
> >>>>>>> Nitish
> >>>>>>>
> >>>>>>> --
> >>>>>>> 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 golan...@googlegroups.com.
> >>>>>>> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/CALjMrq6gpXPbED%2BK2xiOKYvRg08FZwkjoPSUaGg%3DFu5hKP-%2BKQ%40mail.gmail.com
> .
> >>>>>>>
> >>>>>>> --
> >>>>>>> --
> >>>>>>>   Gregor Best
> >>>>>>>   be...@pferdewetten.de
> >>>>>>>
> >>>>>>> --
> >>>>>>> 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 golan...@googlegroups.com.
> >>>>>>> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/d23423e6-f204-8e63-436b-aa3730013392%40pferdewetten.de
> .
> >>>>>
> >>>>> --
> >>>>> --
> >>>>>   Gregor Best
> >>>>>   be...@pferdewetten.de
> >>>
> >>> --
> >>> 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 golan...@googlegroups.com.
> >>> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/cfddeb60-03af-4f87-a6a8-74f76fb069a5%40googlegroups.com
> .
> >
> > --
> > 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.
> > To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/a0d2fca4-951d-4661-bf08-8010d13bd48b%40googlegroups.com
> .
>
> --
> 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.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/CAOyqgcX5tMbQ-r1zxNkjp6pM0nh0UY50jBZSesgHS54OmZJGtw%40mail.gmail.com
> .
>

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CALjMrq4cWmFXjk7pkbrF9JdAfD3Xa0iXa5rwcXUHJjgJ%2B48kSw%40mail.gmail.com.

Reply via email to