Windows环境下使用Chilkat v9.5.0.88运行Go示例程序失败咨询
Chilkat v9.5.0.88 Go绑定Windows运行崩溃排查方案
两次报错均为0xc0000005内存访问错误,第一次故障出现在动态链接的libstdc++库,静态链接后故障出现在程序本身的代码段,本质是编译参数、库匹配度或链接逻辑问题,可按以下步骤逐一排查解决:
- 校验原生库匹配性
你下载的Chilkat原生库为tdm-64-5.1.0 (dw2) 版本的Windows 64位静态库,当前使用的GCC版本为tdm64-5.1.0,大版本匹配无问题,需确认下载的是Go专用的Chilkat预编译包,不要误用C++项目使用的原生库。 - 确认Chilkat Go绑定编译正确性
编译chilkat.a时必须使用v9.5.0.88版本对应的官方Go绑定编译脚本,不可混用旧版本v9.5.0.80的脚本或配置文件。编译完成后先执行go test在chilkat包目录下运行自带的测试用例,确认库本身编译无误后再编译example1示例。 - 修复动态链接场景故障
第一次报错是libstdc动态库加载异常,可将C:\TDM-GCC-64\bin添加到系统PATH环境变量的最靠前位置,避免程序加载了其他软件自带的版本不匹配的libstdc_64-6.dll,修改后重新编译非静态链接版本运行测试。 - 修正静态链接编译参数
Windows下Go 1.17做全静态链接时需补全链接参数,编译命令如下:
不可只加CGO_ENABLED=1 GOOS=windows GOARCH=amd64 go build -ldflags "-extldflags \"-static -static-libgcc -static-libstdc++\"" example1.go-static-libstdc++参数,遗漏-static-libgcc会导致部分运行时依赖链接不全,触发段错误。 - 备选GCC版本适配
若上述操作均无效,可更换tdm-64-4.9.2版本的GCC编译链,部分Chilkat版本对tdm 5.1.0的dw2异常处理框架适配存在已知问题,更换低版本GCC后重新编译chilkat.a和example1测试。 - 校验程序依赖完整性
编译完成后可使用dumpbin /dependents chilkat_example1.exe命令查看生成的可执行文件依赖项,静态链接版本的输出中不应出现libstdc++_64-6.dll、libgcc_s_seh-1.dll等动态库依赖。
内容的提问来源于stack exchange,提问作者Genesio
相关产品推荐
相关产品推荐

