要使用Go 存取共享物件(.so) 檔案中的函數,我們可以利用以下技術:
如果共享函式庫在編譯時已知,則可以使用cgo。透過指定適當的連結器標誌並註解掉某些行,您可以直接從共用程式庫呼叫函數。例如,要從 libfoo.so 呼叫 bar():
<code class="go">package example // #cgo LDFLAGS: -lfoo // // #include <foo.h> import "C" func main() { C.bar() }</code>
或者,cgo 可用於在執行時間動態載入共用物件。這涉及使用 C 包裝函數來實現開啟程式庫 (dlopen())、檢索函數位址 (dlsym()) 和關閉程式庫 (dlclose()) 的邏輯。
作為 cgo 的替代方案,您可以建立一個自訂 C 包裝器,為共用程式庫函數提供與 Go 相容的介面。透過建立您自己的 C 庫,透過 Go 的 CGO API 匯出函數,您可以更好地控制與共享庫的互動。
要複製 Python 的 ctypes 包的功能,考慮使用 mach-go 庫,它提供了一個類似 ctypes 的接口,用於從 Go 訪問 C 庫。該程式庫提供了一種載入和使用共享物件的簡單方法,支援包括 Linux 在內的各種平台。
以上是如何在 Go 中與 Linux 共享庫互動?的詳細內容。更多資訊請關注PHP中文網其他相關文章!