У меня странная проблема.При использовании cgo все нормально, когда cgo_print.h и cgo_print.c находятся в одном каталоге с файлом go.но когда я перемещаю эти два файла в другой каталог, например, ppp (изменил include на ppp / cgo_print.h), произошла ошибка:
неопределенные символы для архитектуры x86_64: «_Greet», ссылкаfrom: __cgo_1f58160d7360_Cfunc_Greet in _x002.o (возможно, вы имели в виду: __cgo_1f58160d7360_Cfunc_Greet) ld: символ (ы) не найден для архитектуры x86_64
go file
package cgo
//#cgo CFLAGS: -I.
//#include <stdlib.h>
//#include "cgo_print.h"
import "C"
import (
"fmt"
"unsafe"
)
func CPrints(msg string) {
name := C.CString("Gopher")
defer C.free(unsafe.Pointer(name))
year := C.int(2018)
ptr := C.malloc(C.sizeof_char * 1024)
defer C.free(unsafe.Pointer(ptr))
size := C.Greet(name, year, (*C.char)(ptr))
b := C.GoBytes(ptr, size)
fmt.Println(string(b))
}
1008 * cg_print.*
cgo_print.c
#include "cgo_print.h"
int Greet(const char *name, int year, char *out) {
int n;
n = sprintf(out, "Greetings, %s from %d! We come in peace :)", name, year);
return n;
}