C 调c语言编译的.lib,在使用cgo调用c语言的lib库,遇到提示.lib文件不存在,自己的解决方法-Go语言中文社区...

首先,此解决方案是我自己遇到的,不代表普适,只是提供一种思路。我的C语言代码是直接嵌入go代码中的。

先看我的项目文档结构:include文件夹里是openssl的头文件,lib文件夹里是C的.lib文件,service文件里面go代码有C的调用。

4f013bcdaf6b789bd15de5d30761e169.png

service中的C代码调用部分代码如下:/*

#cgo CFLAGS : -I../include

#cgo windows LDFLAGS: -L../lib -llibeay32 -lssleay32 -lWS2_32

#include

#include

#include

#include

#include

#include

#include "openssl/rsa.h"

#include "openssl/crypto.h"

#include "openssl/x509.h"

#include "openssl/pem.h"

#include "openssl/ssl.h"

#include "openssl/err.h"

...

...

*/

import C

可以看到CFLAGS是设置头文件路径,LDFLAGS是设置库文件。在配置这两个变量过程中,注意与自己的文件路径相对应,保证正确。尤其注意c代码注释完后紧跟import C ,不要在中间添加其他东西。这里的import C 实际上是伪包,跟我们经常调用的import不一样,在之后c代码调用过程中,只要在函数前加上C就可以了,具体cgo可以参考官方文档。

来说说我遇见的问题吧:

整个项目在编译时通过了,执行时却提示找不到***.dll文件。重装过mingw64(因为要用到gcc),重装过go ,无济于事。。。

经过摸索,最终解决:

1.检查自己的go的环境变量的系统变量中GOROOT,和GOPATH路径是否正确,包括用户变量,以及Path变量中是否加入"%GOROOT%bin",在安装go的时候有些默认设置会在用户变量中建GOROOT。

2.如果上面正确还解决不了的话,就把.lib文件全放在根目录下试试。

注意:在你自己使用Cgo的时候gcc很重要哦,如果没有mingw64,就安装最新的Git,它本身就带有mingw64,并确保此目录下有gcc(这句话很重要),我自己独立安装的mingw64带有gcc,能编译成功却无法运行提示找不到.lib文件;而Git自带的D:Gitmingw64bin却没有gcc,连编译都通过不了,于是我直接把独立安装的D:mingw64bin下的gcc相关的四个文件直接拷到D:Gitming64bin下,竟然成功了 。我猜是两个版本安装时都或多或少少了个别我们需要的文件吧。

因为一些特殊原因无法将全部代码提供给大家参考,请海涵。也可能你出现的问题跟我的一样,但是原因不一样,在这里也只是给大家能够扩展一下解决思路,希望对你有所帮助。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值