2014-06-10 9 views
5

Mam plik .so, którego funkcje chciałbym wywołać w moim kodzie Go.Jak mogę połączyć się z funkcjami biblioteki współdzielonej Linuksa w Go?

Jak mam to zrobić? Przeczytałem pakiet cgo i syscall. Są blisko tego, czego chcę, ale nie widzę żadnego miejsca, w którym mogę wywoływać funkcje w pliku .so.

Chcę osiągnąć dokładnie to, co robi pakiet ctypes w Pythonie.

Czy ktoś może pomóc?

+0

możliwy duplikat [Czy mogę używać obiektów wspólnych z językiem programowania Go (Google)?] (Http://stackoverflow.com/questions/2254777/can-i-use-shared-objects-with-go-google- język programowania) – OneOfOne

Odpowiedz

4

Jeśli chcesz korzystać z biblioteki współdzielonej, która jest znana statycznie podczas kompilacji, możesz po prostu użyć cgo. Zapoznaj się z dokumentacją, jak to zrobić dokładnie, ale zazwyczaj określasz kilka flag łącznika i kilka skomentowanych linii. Oto przykład, jak wywołać funkcję bar() z libfoo.so.

package example 

// #cgo LDFLAGS: -lfoo 
// 
// #include <foo.h> 
import "C" 

func main() { 
    C.bar() 
} 

Możesz również użyć cgo, aby uzyskać dostęp do obiektów wspólnych, które są ładowane dynamicznie w czasie wykonywania. Możesz użyć dlopen(), dlsym() i , aby otworzyć współdzieloną bibliotekę, pobrać adres jednej z funkcji wewnątrz i ostatecznie zamknąć bibliotekę. Zauważ, że nie możesz robić tych rzeczy w Go, musisz napisać jakiś kod opakowania w C, który implementuje niezbędną logikę dla ciebie.

+0

Widzę, że muszę określić funkcję nagłówka w sekcji komentarzy, a następnie wywołać je. Zobaczę co da się zrobić. –

+0

@ AgnivaDeSarker Mogłem trochę źle zrozumieć twoje pytanie. Pozwól, że zmienię odpowiedź. – fuz

+0

Tak, właśnie tego chciałem! Właśnie przegapiłem część LDFLAGS. –

Powiązane problemy