произошла ошибка "Неопределенные символы для архитектуры x86_64" при использовании cgo - PullRequest
0 голосов
/ 30 марта 2019

У меня странная проблема.При использовании 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;
}
...