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> >> . >> > -- 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/CALjMrq43PuD2OUwoYmnVVmC_Pm5jzzwQ%2B9y3aGAtHw5wa3%3D%2BXQ%40mail.gmail.com.