go – How to apply the .h / .c file in different sayings with cgo

code structure:

- hello
    |- hello.c
    |- hello.h

- src
    |- main.go
# hello.c

#include "hello.h"

void *hello() {
    return "hello";
}
# hello.h

void *hello();
# main.go

package main

/*
#cgo        CFLAGS: -I.
#cgo        CFLAGS: -I../
#cgo        CFLAGS: -I../hello/

#include "hello.h"
*/
import "C"

import (
    "fmt"
)

func main() {
    msg := C.hello()
    fmt.Println(msg)
}

using the dictation compilation command |- src:

root@89c4365b4a13:~/go/src/github.com/fdingiit/cgo/src# go build
# github.com/fdingiit/cgo/src
/tmp/go-build810501285/b001/_x002.o: In function `_cgo_090bf5a585f2_Cfunc_hello':
/tmp/go-build/cgo-gcc-prolog:50: undefined reference to `hello'
collect2: error: ld returned 1 exit status
root@89c4365b4a13:~/go/src/github.com/fdingiit/cgo/src#

If all .c / .h / .go files are in the same dictionary, go build works well, but like the dictation structure above, ld can not get the correct symbol.

How to comply with these files with cgo?