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

  • 相关阅读:
    49. 字母异位词分组
    73. 矩阵置零
    Razor语法问题(foreach里面嵌套if)
    多线程问题
    Get json formatted string from web by sending HttpWebRequest and then deserialize it to get needed data
    How to execute tons of tasks parallelly with TPL method?
    How to sort the dictionary by the value field
    How to customize the console applicaton
    What is the difference for delete/truncate/drop
    How to call C/C++ sytle function from C# solution?
  • 原文地址:https://www.cnblogs.com/findumars/p/6354070.html
Copyright © 2011-2022 走看看