Возможно ли подключить уже скомпилированный проект GO к другом проекту и вызывать от туда функции скомпилированного проекта
(linux) Здравствуйте, возможно ли подключить уже скомпилированный проект GO к своему проекту, чтобы я мог вызывать функции скомпилированного проекта в своем проекте? Альтернатива dlopen в c++
Ответы (1 шт):
Автор решения: Ainar-G
→ Ссылка
В си или в го? В си можно, если проект скомпилирован
с --buildmode=c-shared. В го можно через механизм
плагинов. Документация для
сишного варианта:
$ go help buildmode
The 'go build' and 'go install' commands take a -buildmode argument which
indicates which kind of object file is to be built. Currently supported values
are:
[…]
-buildmode=c-shared
Build the listed main package, plus all packages it imports,
into a C shared library. The only callable symbols will
be those functions exported using a cgo //export comment.
Requires exactly one main package to be listed.
[…]
Пример сишного варианта:
package main
import "fmt"
import "C"
//export goMain
func goMain() {
fmt.Println("Hello from Go!")
}
func main() {}
#include "gomain.h"
int main(void)
{
goMain();
return 0;
}
$ go build --buildmode c-shared -o ./libgomain.so ./main.go
$ gcc -L . -o ./main.bin ./main.c -l gomain
$ env LD_LIBRARY_PATH="$PWD" ./main.bin
Если нужен вариант гошного плагина, тоже можно добавить.