首页  >  文章  >  后端开发  >  以下是一些标题选项,可以抓住文章的本质并将其框架为一个问题: **选项1(关注问题):** * **为什么 L 时我的 Go C 共享库会挂在 https.Post() 上

以下是一些标题选项,可以抓住文章的本质并将其框架为一个问题: **选项1(关注问题):** * **为什么 L 时我的 Go C 共享库会挂在 https.Post() 上

Barbara Streisand
Barbara Streisand原创
2024-10-25 08:33:02261浏览

Here are a few title options, capturing the essence of your article and framing it as a question:

**Option 1 (Focus on the problem):**

* **Why Does My Go C-Shared Library Hang on https.Post() When Linked to a C Application?**

**Option 2 (Focus on the c

调试 C 共享库 (Go) 在 HTTPS.Post() 调用上挂起

Go C 共享库时会出现问题(使用 -buildmode=c-shared 构建)挂在 https.Post() 上。当代码构建为可执行文件时,不会出现此问题。

要调试和解决此问题,请考虑以下事项:

  1. 使用 Stracing 进行故障排除:

    strace -fp PID

    此命令可能会显示程序卡在 futex() 调用中。

  2. 使用 ListenAndServe 进行高级分析:

    http.ListenAndServe("localhost:6060", nil)
    http.Post()

    如果程序挂在 http.Post() 上,则可能表明探查器被阻止。

  3. 分析堆栈跟踪:

    http.Post() 挂在 futex() 调用上,该调用用于同步 goroutine。堆栈跟踪显示 goroutine 在runtime.futexsleep() 和runtime.notesleep() 处被阻塞。

  4. 解决方案:控制Go 运行时加载

    解决方案在于控制Go运行时的加载时间。当与 C 或 C 应用程序链接时,Go 运行时会在应用程序启动后立即加载。然而,在分叉进程中,这种行为可能会导致不可预测的结果。

    通过使用 dlopen 和 dlsym,您可以在 fork() 调用后加载 Go 共享库,并控制 Go 运行时的加载时间。这种方法确保了分叉进程中的可预测行为。

以上是以下是一些标题选项,可以抓住文章的本质并将其框架为一个问题: **选项1(关注问题):** * **为什么 L 时我的 Go C 共享库会挂在 https.Post() 上的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn