Mongo-cxx-driver Windows平台编译记录
2015-03-23 01:49
281 查看
Mongo-cxx-driver Windows平台编译记录
官方的代码源在这里:https://github.com/mongodb/mongo-cxx-driver,从这里clone代码即可,官方推荐新用户使用legacy分支,好,就用这个。用到的工具:
1. Visual Studio。我用的是VS2013
2. Boost库。我用的版本是1.55。这里需要注意的是,编译的时候,默认只会编译静态版本的库,你需要手动编译动态库,bjam命令行加入link=shared即可。这一步非常重要,否则在后面链接的时候很可能会提示找不到Boost库文件。我一直卡在这里,费了很长时间。
3. Python。2.7最好。不支持3以上版本。
4. Scons。这是和CMake类似的工具,没它不能编译这个库。不过这个东西不好用,没CMake好用。
开始编译
吐槽下这个库的编译,每一种ABI格式的库它都要重新编译一遍,尼玛,一次编译完全不行吗?第一种,MDd,动态链接到运行时库的调试静态库:
[code]scons --32 --prefix=path_to_install --cpppath=path_to_boost_include --libpath=path_to_boost_lib --dynamic-windows --dbg=on install
第二种,MD,动态链接到运行时库的静态库:
[code]scons --32 --prefix=path_to_install --cpppath=path_to_boost_include --libpath=path_to_boost_lib --dynamic-windows install
区别就是–dbg=on这里。–dynamic-windows这个指示运行时库是动态链接的。这个用的最多,你要是想静态链接到运行时库(很少用,至少对我来说),把这个选项去掉就行了。
假如你要编译成动态库,只需要加入–sharedclient这个选项即可,它指定把库编译成动态库。
编译出所有ABI格式的库,一共要编译4遍。反人类啊,尼玛!!!编译速度也不敢恭维,很慢。
测试程序
如果你是链接到mongo-cxx-driver的静态库,那么记得加入预处理器STATIC_LIBMONGOCLIENT,否则会出现ABI不对应的问题。不加就是链接到动态库。链接到libmongoclient的静态库还有一个问题就是,可能会出现说Boost库某某库,已经定义了,遇到这种,就需要你把这个库加入到忽略特定默认库里去,否则会链接失败的。这里又是一个坑,唉。。。
测试代码:
[code] #include <iostream> #include <WinSock2.h> #include <mongo/client/dbclient.h> void run() { mongo::DBClientConnection c; c.connect("localhost"); } int main(int argc, char** argv) { mongo::client::initialize(); try { run(); std::cout << "连接成功" << std::endl; } catch (const mongo::DBException& e) { std::cout << "错误: " << e.what() << std::endl; } getchar(); return 0; }
winsock2.h必须在dbclient.h之前包含,这个是这个库要求的。如果和MFC配合,估计又得出各种编译错误了,好在我早已不用MFC了。
就这么多,总结一下是,这个库用CMake可能更好一些。各种编译错误,各种坑,在Windows上编译需要注意的问题比较多。Linux没有这些问题。
相关文章推荐
- windows平台下安装、编译、使用mongodb C++ driver 正常运行
- MongoDB C++ Driver Windows 编译记录
- Windows系统上安装生成Mongo-cxx-driver的lib和include
- centos 6 编译mongo-cxx-driver
- 在Windows下编译mongo-c-driver 1.3.x
- win下编译、安装mongo-cxx-driver-legacy
- 配置记录:CMake管理项目-Caffe在windows平台的C++编译安装及其依赖项
- websocket 库 "boost.beast" windows 平台 VS2015 编译过程记录
- 在windows下编译mongodb cxx driver
- windows平台下编译stunnel
- FFMPEG在windows平台编译的详细过程,包括环境安装
- windows平台下vlc编译之十:vlc-1.0.0的编译
- windows平台下vlc编译之二:vlc-0.8.6i的编译(转自jeremiah的博客)
- windows平台下vlc编译之二:vlc-0.8.6i的编译
- windows平台下vlc编译之七:vlc-1.0.0-git的编译
- [原创]开源opensc工程windows平台下编译
- windows平台下vlc编译之五:vlc-0.9.6的编译
- windows平台下vlc编译之九:vlc-1.0.0-rc*的编译
- windows平台下vlc编译之八:vlc-0.9.9[a]的编译
- [HOW-TO] Windows平台如何编译MySQL代码