在使用mingw交叉编译时,调用openssl库产生的错误汇总

7 篇文章 0 订阅
3 篇文章 0 订阅

如果有问题,请加QQ群 891339868 进行交流 

在使用gcc编译代码时,直接调用openssl接口,没有任何错误,为了要对windows兼容,选择使用mingw交叉编译器进行编译,发现出了一大堆儿的错误,现在总结一下,避免以后犯同样的错误:

一、编译时出现“include/openssl/safestack.h:186:16: error: expected expression before ‘)’ token
         (type *)sk_pop(CHECKED_STACK_OF(type, st))”

这个错误咋一看,很无厘头,看上去像是语法错误,可是在使用gcc时,并没有发现这个错误,这是为什么呢?产看了openssl的源码,也没发现哪个地方存在语法错误(哈哈,也不可能出现这么低级的错误),进过推断,应该是编译配置的问题,可是编译配置的选项很多,从何查起呢?我总结了一个比较好用的方法,直接使用openssl库编译时的配置,很奏效,这个错误没有了,为什么呢?是哪个配置起作用了呢?经过测试,是WIN32_LEAN_AND_MEAN这个配置起了作用,这个配置是什么意思呢?详细解释可以看这篇文章:#define WIN32_LEAN_AND_MEAN 的作用 - 采男孩的小蘑菇 - 博客园

这个宏的主要作用就是屏蔽了一些不必要的头文件,提高编译速度和减小生成文件的大小,当然,也避免头文件之间的冲突,上面的错误,应该就是windows相关的头文件包含冲突造成的。

二、编译时出现:

“rand_win.c:(.text+0xeed):对‘_imp__GetDeviceCaps@8’未定义的引用”,

“rand_win.c:(.text+0xf1b):对‘_imp__CreateCompatibleBitmap@12’未定义的引用”,

“rand_win.c:(.text+0xf3d):对‘_imp__GetObjectA@12’未定义的引用”

“rand_win.c:(.text+0x102d):对‘_imp__GetDIBits@28’未定义的引用”

“rand_win.c:(.text+0x1091):对‘_imp__DeleteObject@4’未定义的引用”

出现这种情况是链接错误,是相关库没有被链接,因为libcrypto.a需要链接libgdi32.a,所以链接时需要配置-lgdi32。

好了,今天就记录到此!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值