鱼与熊掌无法兼得 暂时没有找到调用栈中,同时显示 go 、 c 相关函数 但是,发现 go 程序因 cgo 抛异常 crash 时,可以分别捕获各自的函数调用栈 go 调用栈 go 程序 crash 时,会向 stderr 打印所有 go 协程调用栈信息 因此只要捕获这些信息到文件即可 然后用关键字cgocall定位日志 c 调用栈 可以用 gdb 直接从 coredump 文件中
1.配置CGO_ENABLED为1 go env -w CGO_ENABLED=1 2.安装gcc环境,否则出现cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%错误 安装包:链接:https://pan.baidu.com/s/1sgF9lijqGePnFLiiixt4Zg?pw
思路 将 C++ 库包装成 C 库 -> golang 通过 cgo 调用 C 库 C ++ 相关文件 目录列表 include/ some.h C++ 库头文件some_wrapper.h <= 用于将 C++ 库包装成 C 库的头文件 lib/ libsome.a C++ 库 src/ some_wrapper.cpp <= 用于将 C++ 库包装成 C 库的源码文件 源码示例
golang的sqlite驱动不使用cgo实现 更换gorm默认的SQLite驱动 最近在开发一个边缘物联网程序时使用Golang开发,用到GORM来操作SQLite数据库,GORM默认使用gorm.io/driver/sqlite这个库作为SQLite驱动,该库用CGO实现,在使用过程中遇到一些问题,编译好二进制程序放到资源受限的设备中运行,报错如下;最后更换第三方SQLite驱动解决。 g