正在用boost::asio做一个项目的底层通讯。之前做demo的时候用的boost是编译成静态库形式,一切都很顺利。但这个项目想将通讯底层封装成dll的形式,所以决定将boost库也以dll的形式链接。结果先是出现
1>LINK : fatal error LNK1104: 无法打开文件“libboost_system-vc100-mt-gd-1_43.lib”
检查boost里面提供自动链接功能的 config\auto_link.hpp 发现要定义 BOOST_DYN_LINK 宏才能将 lib前缀去掉。随定义 BOOST_DYN_LINK,
结果出现
1>LINK : fatal error LNK1104: 无法打开文件“libboost_date_time-vc100-mt-gd-1_43.lib”
不知道为什么 BOOST_DYN_LINK 没有控制住 date_time 库的前缀,好在 date_time 和 Regex 虽然是自动链接的 但是 能 通过 -DBOOST_DATE_TIME_NO_LIB
和-DBOOST_REGEX_NO_LIB
声明 将他们禁止掉。
开始以为 -DBOOST_DATE_TIME_NO_LIB
和-DBOOST_REGEX_NO_LIB
声明 指的是宏定义,最后才发现 是 配置属性->c/c++ ->命令行。。。。应该是命令行编译的东西,有空再详细了解吧。
===================================================
在连接 thread库的时候 又出现 LINK : fatal error LNK1104: 无法打开文件“libboost_thread-vc100-mt-gd-1_43.lib”,即便设置BOOST_DYN_LINK也一样没有效果,应该和 date_time 和 Regex 库一样的问题,查资料后发现是要定义 BOOST_ALL_DYN_LINK。 其实这个宏在 <boost/config/user.hpp> 中就能定义一下,以后只要直接包含这个头文件就好了。。。
因为thread库有用到 一些时间相关的东西 所以 不能
-DBOOST_DATE_TIME_NO_LIB
和-DBOOST_REGEX_NO_LIB。