Cgo 运行时 test2json: exit status 3221225781

Cgo在使用了动态库的情况,通过了编译,在运行时候推出程序并提示下面错误

....
test2json: exit status 3221225781

这是应为在编译时能够找到对应的动态文件而在运行时无法找到的原因。

解决

可以有多种方式解决该问题。

通用的解决方法:

  • 把动态库文件放置于可执行程序的相同路径。

如果是测试文件(_test.go)中需要调用cgo出现该问题,因为在运行_test时是在操作系统的临时文件目录下生成的测试可执行文件。
所以需要把动态库放置于用户的临时文件目录中
例如windows的用户临时目录为: C:\Users\{你的系统用户名}\AppData\Local\Temp

Windows平台:

  • 可将dll文件所处的目录绝对路径,加入到在windows环境变量PATH中。

Linux:

  • 设置LD_LIBRARY_PATH环境变量

MacOS:

  • 设置DYLD_LIBRARY_PATH环境变量

原理

动态库的查找根据不同平台有不同的表现:

Linux:

  1. 可执行文件同目录下的动态链接库;
  2. 编译时指定的动态链接库位置(-Wl,-rpath=< thirdparty lib_path >);
  3. 使用LD_LIBRARY_PATH环境变量指定的动态链接库位置,可以在/etc/profile或者用户profile文件设置;
  4. /lib/usr/lib 中的动态链接库;
  5. /etc/ld.so.conf中指定的动态链接库位置(需要使用ldconfig命令使其生效);

Windows:

  1. 可执行文件所在的目录;
  2. Windows 系统目录C:\WINDOWS\System32
  3. Windows 目录C:\WINDOWS\;
  4. PATH 环境变量中列出的目录;

参考文献

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值