cgo не компилирует C ++, поэтому вам нужно поместить функцию c ++ в файл .cpp и скомпилировать ее с помощью компилятора c ++.Затем вы создаете библиотеку и помещаете только прототип функции в ваш файл .h.
Файл .h должен быть чистым C, например, вы не можете использовать тип c ++ в качестве аргумента своей функции.
Вот простой пример (создание статической библиотеки на linux с использованием g ++ / ar):
cpplink_test / cpp / cpplink.cpp:
#include <iostream>
#include "cpplink.h"
extern "C" void helloCpp()
{
std::cout << "Hello from Cpp !!!!\n";
}
cpplink_test / cpp / cpplink.h:
#ifdef __cplusplus
extern "C" {
#endif
void helloCpp();
#ifdef __cplusplus
}
#endif
Скомпилировать и создать статическую библиотеку (из cpp/ dir):
g++ -fPIC -c cpplink.cpp
ar cru libcpplink.a cpplink.o
ranlib libcpplink.a
cpplink_test / main.go:
package main
/*
#cgo CPPFLAGS: -I${SRCDIR}/cpp
#cgo LDFLAGS: -L${SRCDIR}/cpp -lcpplink -lstdc++
#include <cpplink.h>
*/
import "C"
import "fmt"
func main() {
fmt.Println("Hello GO")
C.helloCpp()
}
Сборка и запуск:
go build
./cpplink_test
Вывод:
Hello GO
Hello from Cpp !!!!
Если вы работаете в Windows, он может немного отличаться при создании библиотеки C ++.