Страницы

Поиск по вопросам

суббота, 21 декабря 2019 г.

Как в golang использовать c или c++ код?

#cpp #c #golang


Подскажите простой пример использования функции из c \ c++ в программе на golang.
Например на c \ c++  будет функция sayHello возвращающая значение -


  "Привет,Роман, это значение из функции"


.
Вот этот текст я хочу получить в программе на golang.
Как это сделать? я читал-ещё нужно установить компилятор gcc .
Можете пожалуйста привести примеры.
Спасибо
    


Ответы

Ответ 1



Объявите класс // foo.hpp class cxxFoo { public: int a; cxxFoo(int _a):a(_a){}; ~cxxFoo(){}; void Bar(); }; // foo.cpp #include #include "foo.hpp" void cxxFoo::Bar(void){ std::cout<a<Bar(); } Go file package foo // #include "foo.h" import "C" import "unsafe" type GoFoo struct { foo C.Foo; } func New()(GoFoo){ var ret GoFoo; ret.foo = C.FooInit(); return ret; } func (f GoFoo)Free(){ C.FooFree(unsafe.Pointer(f.foo)); } func (f GoFoo)Bar(){ C.FooBar(unsafe.Pointer(f.foo)); } Makefile // makefile TARG=foo CGOFILES=foo.go include $(GOROOT)/src/Make.$(GOARCH) include $(GOROOT)/src/Make.pkg foo.o:foo.cpp g++ $(_CGO_CFLAGS_$(GOARCH)) -fPIC -O2 -o $@ -c $(CGO_CFLAGS) $< cfoo.o:cfoo.cpp g++ $(_CGO_CFLAGS_$(GOARCH)) -fPIC -O2 -o $@ -c $(CGO_CFLAGS) $< CGO_LDFLAGS+=-lstdc++ $(elem)_foo.so: foo.cgo4.o foo.o cfoo.o gcc $(_CGO_CFLAGS_$(GOARCH)) $(_CGO_LDFLAGS_$(GOOS)) -o $@ $^ $(CGO_LDFLAGS) Тестирование // foo_test.go package foo import "testing" func TestFoo(t *testing.T){ foo := New(); foo.Bar(); foo.Free(); } Установка библиотеки gotest rm -f _test/foo.a _gotest_.6 6g -o _gotest_.6 foo.cgo1.go foo.cgo2.go foo_test.go rm -f _test/foo.a gopack grc _test/foo.a _gotest_.6 foo.cgo3.6 1 PASS

Комментариев нет:

Отправить комментарий