boost库在windows下使用时的编译、链接注意事项(不断更新)

来源:互联网 发布:计网tcp编程 编辑:程序博客网 时间:2024/06/04 23:23

*.windows下,VC和gcc编译出的库是不能通用的,只能各搞一套

*.大部分的boost程序都需要链接boost_system这个库

*.使用asio时,由于asio在windows下的实现用了winsock,所以必须加头文件和链接库的目录

         如果用VC的编译器,需要添加头文件目录“C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include”(VC2010下),库文件目录C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib(VC2010)下,编译器将自动链接ws2_32.lib(有时还包括mswsock.lib)文件,无需手工指定链接或者在源码中添加预定义宏#pragma comment(lib, "ws2_32.lib")。这是因为boost的头文件里已经定义了

         如果使用gcc的编译器,需要手工指定库文件目录,默认应该在gcc的安装目录下,必须手工指定链接ws2_32.a和mswsock.a文件

        

*.使用boost::thread时,可能会遇到以下问题

           gcc静态链接boost_thread库时,即使添加了库文件,也会报告大量的_imp__XXX错误,以下链接都描述了这个错误的原因

           http://novus.pixnet.net/blog/post/27061690-mingw-4.5-%2B-boost-1.44-%E7%9A%84%E9%B3%A5%E4%BA%8B

           http://www.progtown.com/topic796791-boost-thread-under-mingw-static-configuration.html

           解决方法

           https://svn.boost.org/trac/boost/ticket/4614

           https://svn.boost.org/trac/boost/ticket/4921

           http://lajabs.net/2011/03/29/boost_thread%E5%BA%93%E7%9B%B8%E5%85%B3%E9%97%AE%E9%A2%98/

其实根源就在于boost thread在windows下,当使用gcc时默认是用dll链接(动态链接),于是链接静态库的时候,链接器会报告导入函数找不到,使用gcc的预编译命令加上BOOST_THREAD_USE_LIB定义让boost链接静态库来解决问题

这个问题在boost::thread文档Using and building the library里的第二段有描述

http://www.boost.org/doc/libs/1_53_0/doc/html/thread/build.html