偵錯掛在網路呼叫上的C 共享函式庫(用Go 寫)
用戶遇到了一個問題,其中Go 程式庫編譯為C 共享庫(使用-buildmode=c-shared)掛在透過http.Post() 的網路呼叫上。雖然該庫的可執行版本運作正常,但共享庫卻出現了意外行為。
經過分析,發現問題與 Go 運行時的生命週期管理有關。當 Go C 共享庫連結到 C/C 應用程式時,Go 運行時會在應用程式啟動時載入。但是,如果在初始載入後分叉進程並且在分叉進程中使用 Go 庫,則可能會發生不可預測的行為。
解決方案:
解決此問題問題,需要控制Go運行時的載入。利用 dlopen() 和 dlsym() C 函數將 Go 共享庫動態載入到分叉進程中。這允許手動控制 Go 運行時的載入時間,確保穩定的行為。
以上是## 為什麼我的 Go C 共享函式庫在分叉後網路呼叫掛起?的詳細內容。更多資訊請關注PHP中文網其他相關文章!