Thanks Ian. I had included that because it seems required in order for me 
to refer to the return type (C.FILE) and so I can access the underlying 
C.fopen function.  This is the approach I have with open but perhaps this 
is different.
If I'm not supposed to use the include, can you advise how I should refer 
to the type/function from the header?

Tony

On Friday, November 3, 2017 at 8:28:38 PM UTC-4, Ian Lance Taylor wrote:
>
> On Fri, Nov 3, 2017 at 2:24 PM,  <tonywa...@gmail.com <javascript:>> 
> wrote: 
> > 
> > I've been writing a shared-object which I'll use via LD_PRELOAD to 
> override 
> > the open syscall. This is currently working OK but now I want to move on 
> to 
> > fopen. I've defined it (as far as I can tell) in-line with the stdio 
> header 
> > see here. However, when I try and build: 
> > 
> > $ go build -buildmode=c-shared 
> > # github.com/walkert/loader 
> > In file included from 
> > $WORK/github.com/walkert/loader/_obj/_cgo_export.c:3:0: 
> > ./main.go:56:14: error: conflicting types for ‘fopen’ 
> > In file included from ./main.go:5:0, 
> >                  from $WORK/
> github.com/walkert/loader/_obj/_cgo_export.c:3: 
> > /usr/include/stdio.h:275:14: note: previous declaration of ‘fopen’ was 
> here 
> >  extern FILE *fopen (const char *__restrict __filename, 
> >               ^~~~~ 
> > /tmp/go-build775342366/github.com/walkert/loader/_obj/_cgo_export.c:17:7: 
>
> > error: conflicting types for ‘fopen’ 
> >  FILE* fopen(char* p0, char* p1) 
> >        ^~~~~ 
> > In file included from ./main.go:5:0, 
> >                  from $WORK/
> github.com/walkert/loader/_obj/_cgo_export.c:3: 
> > /usr/include/stdio.h:275:14: note: previous declaration of ‘fopen’ was 
> here 
> >  extern FILE *fopen (const char *__restrict __filename, 
> >               ^~~~~ 
> > 
> > I've seen this before when I was trying to return an int instead of 
> C.int so 
> > I have a feeling I'm missing something simple here. Any pointers would 
> be 
> > much appreciated. 
>
> It looks like the same file is doing #include <stdio.h> and `//export 
> fopen`.  That won't work, because, as you can see, the definition of 
> the Go function fopen will conflict with the declaration in stdio.h. 
>
> Ian 
>

-- 
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