我有一個.so文件,其功能我想在我的Go代碼中調用。如何在Go中調用Linux共享庫函數?
我該如何去做呢?我已經閱讀了cgo和syscall軟件包。他們接近我想要的,但我沒有看到任何可以在.so文件中調用函數的地方。
我想實現Python中ctypes包的功能。
有人可以幫忙嗎?
我有一個.so文件,其功能我想在我的Go代碼中調用。如何在Go中調用Linux共享庫函數?
我該如何去做呢?我已經閱讀了cgo和syscall軟件包。他們接近我想要的,但我沒有看到任何可以在.so文件中調用函數的地方。
我想實現Python中ctypes包的功能。
有人可以幫忙嗎?
如果要在編譯時使用靜態已知的共享庫,則可以簡單地使用cgo。閱讀關於如何做到這一點的文檔,但通常你會指定一些鏈接器標誌和一些註釋掉的行。以下是如何從libfoo.so
調用功能bar()
的示例。
package example
// #cgo LDFLAGS: -lfoo
//
// #include <foo.h>
import "C"
func main() {
C.bar()
}
您還可以使用cgo訪問在運行時動態加載的共享對象。您可以使用dlopen()
,dlsym()
和dlclose()
來打開共享庫,檢索其中一個函數的地址並最終關閉該庫。注意,你不能在Go中做這些事情,你必須在C中編寫一些包裝代碼,爲你實現必要的邏輯。
我看到我必須在註釋部分指定頭部函數,然後調用它們。讓我看看我能做些什麼。 –
@AgnivaDeSarker我可能會誤解你的問題。讓我重述一下我的答案。 – fuz
是的,這就是我想要的!我只是錯過了LDFLAGS部分。 –
[我可以與Go(Google)編程語言使用共享對象嗎?](http://stackoverflow.com/questions/2254777/can-i-use-shared-objects-with-go-google-編程語言) – OneOfOne