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 <b...@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.sabo...@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 <b...@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 golang-nuts+unsubscr...@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
>>>   b...@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/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
>   b...@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/CALjMrq4DULSVKpMF356QV_yJSmFBpEhMzDGp3M-Lm0s5qCq9iA%40mail.gmail.com.

Reply via email to