未定义的错误引用仅适用于某些功能

I have a library and a C interface built for it. My program compiles just fine with versionString() but not with loadConfig(). How is that possible?

walker.h :

#ifndef WFE_C_H
#define WFE_C_H

#ifdef __cplusplus
extern "C" {
#endif

  const char* versionString();

  void* loadConfig(const char *filePath, char* errorMessageBuffer, int bufferLen);

#ifdef __cplusplus
}
#endif

#endif

Working version:

package main

/*
#cgo CFLAGS: -Isrc/walker
#cgo LDFLAGS: -L${SRCDIR}/lib -lwalker
#include "walker.h"
*/
import (
    "C"
)
func main() {
    p := C.versionString()
    version := C.GoString(p)
    fmt.Println(version)
}
// output: v1.94

Not working version:

package main

/*
#cgo CFLAGS: -Isrc/walker
#cgo LDFLAGS: -L${SRCDIR}/lib -lwalker
#include "walker.h"
*/
import (
    "C"
)
func main() {
    errorMessageBuffer := C.CString("")
    pathPtr := C.CString("/src/vali/config")
    bufferLen := C.int(len(4000))

    C.loadConfig(pathPtr, errorMessageBuffer, bufferLen)
}

Traceback:

/tmp/go-build056292810/github.com/testong/vali/_obj/main.cgo2.o: In 
function `_cgo_b2bd1c9e3dda_Cfunc_loadConfig':
/tmp/go-build/github.com/testong/vali/_obj/cgo-gcc-prolog:43: undefined 
reference to `loadConfig'
collect2: error: ld returned 1 exit status

In walker.h , the export function is void* loadConfig(const char *filePath, char* errorMessageBuffer, int bufferLen);

And you used C.loadConfigDirectory(pathPtr, errorMessageBuffer, bufferLen).

The function loadConfigDirectory is not defined.

Maybe it is a typo?

Working version works because versionString is already defined.