從Go 呼叫外部函數:探索.so 物件檔案
是否可以整合儲存在.so 物件中的基於C 的函數Go程式碼中的檔案?這個問題引起了 Go 開發人員的好奇心,但找到明確的解決方案可能是一個挑戰。
一個常見建議的方法是利用「syscall.LoadLibrary」函數,但這種嘗試通常會導致未定義的函數錯誤。經過對 Godocs 的進一步調查,很明顯「syscall」套件缺少「LoadLibrary」函數。
那麼,Go 程式設計師仍然可以利用外部函式庫中的函數嗎?絕對地! POSIX 平台結合使用 CGO 和「dlopen」等功能,提供了一個很有前景的解決方案。讓我們深入研究一個範例來說明這種方法:
<code class="go">// #cgo LDFLAGS: -ldl // #include <dlfcn.h> import "C" import fmt func foo() { handle := C.dlopen(C.CString("libfoo.so"), C.RTLD_LAZY) bar := C.dlsym(handle, C.CString("bar")) fmt.Printf("bar is at %p\n", bar) }</code>
透過使用「CGO」並定義所需的C 函數,我們可以動態載入外部函式庫並在Go 程式碼中無縫存取其函數。這開啟了將現有的基於 C 的功能整合到 Go 應用程式中的可能性,從而釋放了新的開發可能性。
以上是Go 程式設計師可以使用外部函式庫中的函數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!