Как использовать C.free?
Пытаюсь собрать программу, состоящую из двух частей - Go-библиотека (в идеале нужна статическая) и основная C++ программа. Пробую:
~/opm-mkmd $ go build -buildmode=plugin -a -tags netgo -o opm-mkmd.so opm-mkmd.go
./opm-mkmd.go:22:11: could not determine kind of name for C.free
Я добавлял даже эти строки:
/*
#include <stdlib.h>
*/
...
//export GetMetadata
Не помогло...
Дистрибутив - Debian 11 (bullseye/stable)
Код: https://github.com/Dima-diep/opm-mkmd
К сожалению, опыта написания и сборки программ на Go не имею...
UPD: минимально воспроизводимый пример:
~ $ cat min.go
package main
/*
#include <stdlib.h>
*/
import (
"C"
"unsafe"
"fmt"
)
//export fnc
func fnc(cch *C.char) {
pkg := cch
defer C.free(unsafe.Pointer(cch))
fmt.Printf("%s\n", pkg)
}
~ $ cat min.c
extern void fnc(char *pkg)
int main() {
fnc("OK");
return 0;
}
Ответы (1 шт):
Автор решения: RandomDice 779
→ Ссылка
Сработало вот что. надо "C" импортировать отдельно, и прямо над ним включать stdlib.h. вот так:
// #include <stdlib.h>
import "C"
import (
...
)