zoukankan      html  css  js  c++  java
  • Qt中加载Libevent静态库(通过reimp和rs两条语句将lib转为a)

    文章来源:http://blog.sina.com.cn/s/blog_731bf4c90102wnpr.html

    本文仅是个人经验总结,若有错误欢迎指教!

        最近要做一个跨平台的项目,同时也涉及到网络数据传输,所以考虑采用Qt和Libevent。

    1.vs编译libevent

        参考网上众多通过VS编译Libevent的文章(http://www.cnblogs.com/luxiaoxun/p/3603399.html),成功编译得到了​libevent.lib、libevent_core.lib、libevent_extras.lib这三个静态库。

    2.Qt工程中添加Libevent静态库

        新建了一个QT工程(路径为E:LibeventCaster),创建路径E:LibeventCasterlibevent_includeevent2,存放libevent库的include和WIN32_Code文件夹下的所有.h文件。在QT工程的生成目录(本文中是E:LibeventCaster-build-desktop)中创建路径E:LibeventCaster-build-destoplibevent_lib,存放上面编译得到的libevent.lib等三个静态库。在.pro文件(路径为E:LibeventCaster)中添加头和库的路径,如下所示:

    INCLUDEPATH += ./​libevent_include             

    LIBS += ​-L./libevent_lib -llibevent -llibevent_core -llibevent_extras

    其中INCLUDEPATH语句添加.h头文件路径,在程序中通过#include 添加libevent的头,LIBS语句添加lib静态库文件路径,-L代表是静态库,后面无空格,紧跟静态库路径,-l(小写L)​后面紧跟静态库名称(省略.lib),多个-l添加多个静态库。

    注意:1)lib库是存放在生成目录-build-desktop下的,否则会提示找不到libevent.lib​。

    ​          2)如果程序中使用了WSAStartup,需要添加ws2_32.lib库,如下所示。

                 LIBS += -lws2_32​

              3)我的QT最开始使用的是mingw编译器,而libevent.lib三个静态库是用vc++编译器编译的,在qt中使用Libevent的时候会出现security_cookie等类似的错误,在网上找了很久,说是bufferoverflow的问题,让加载bufferoverflowU.lib库,但是错误未解决。又考虑mingw静态库是.a后缀,所以通过reimp和rs两条语句将lib转为a,(http://blog.sina.com.cn/s/blog_731bf4c90102wnn4.html)但错误仍未解决,看来不是后缀名的问题了,考虑还是编译器不一致的问题,VC++编译中使用了缓存溢出的一些东西,而mingw中没有,由于本人不知道如何用mingw来编译libevent.lib(汗颜),所以采用笨办法,设置Qt在Windows平台下的编译器为vc++,这样两者一致起来,错误果然解决了,设置方法如下。

                  工具——选项——Qt4,设置Qt的版本​(我的安装版本是qt-win-opensource-4.8.2-vs2008,安装路径D:Qt4.8.2),qmake路径为D:Qt4.8.2inqmake.exe,工具链会自动加载vc++编译器。

                4)用上面的方法又出现新的错误​ __imp__CryptGenRandom,网上搜索说缺少AdvAPI32.lib库,所以按照如下方法添加库,错误解决,程序编译成功。

                      LIBS += -lAdvAPI32​

    http://blog.csdn.net/libaineu2004/article/details/53224099

  • 相关阅读:
    【2】通过Ajax方式上传文件(图片),使用FormData进行Ajax请求
    【1】mongoDB 的安装及启动
    第一篇博客
    Java Integer 进制转化的实现(附源码),对模与补码的理解
    筛法求素数(普通筛法与欧拉筛法) 这是个问题
    字典的拼接方法
    使用Selenium抓取百度指数一
    正则表达式30分钟入门教程
    微博抓取尝试
    __call__方法的最简要说明
  • 原文地址:https://www.cnblogs.com/findumars/p/6354070.html
Copyright © 2011-2022 走看看