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. But the following case works all fine whether we pass the individual
file or not.:



*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 <jake6...@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
>>>>> <https://groups.google.com/d/msgid/golang-nuts/CALjMrq6gpXPbED%2BK2xiOKYvRg08FZwkjoPSUaGg%3DFu5hKP-%2BKQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>>> --
>>>>> --
>>>>>   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
>>>>> <https://groups.google.com/d/msgid/golang-nuts/d23423e6-f204-8e63-436b-aa3730013392%40pferdewetten.de?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>> --
>>> --
>>>   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 golang-nuts+unsubscr...@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
> <https://groups.google.com/d/msgid/golang-nuts/cfddeb60-03af-4f87-a6a8-74f76fb069a5%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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/CALjMrq48inmHYKLGyb18brEBE1MYC8G3-84aOE3j3-9-0URZeQ%40mail.gmail.com.

Reply via email to