首页 > 后端开发 > Golang > 正文

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

Barbara Streisand
发布: 2024-10-25 08:33:02
原创
272 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!