当前位置:首页 » 编程软件 » vs2010boost编译

vs2010boost编译

发布时间: 2023-02-02 23:13:36

① 新人求教 驱动源码编译安装

1、安装scons
(1) 下载python2.7, 使用x86_32位,因为scons只有32位安装包可用;
(2) 下载scons2.3.0;
(3) 安装python 和 scons, 将C:\Python27\Scripts写入PATH;
(4) 下载安装pywin32 ,It is recommended you install pywin32 if you want to do parallel builds (scons -j)

2、安装boost库(1.49版本).
解压后双击bootstrap.bat,生成bjam.exe后,cd到目录c:\boost下,(将boost_1_49更名为boost了)编译boost。
编译命令:C:\boost>bjam variant=release --with-filesystem --with-thread --with-date_time --with-program_options threading=multi toolset=msvc-10.0 link=static runtime-link=static address-model=32
这是使用VS2010环境编译的release版本,编译完成后,生成C:\boost\stage\lib文件夹,下面有6个lib库:

如果要编译成debug版本,使用命令:bjam variant=debug --with-filesystem --with-thread --with-date_time --with-program_options threading=multi toolset=msvc-10.0 link=static runtime-link=static address-model=32

编译完成后,生成C:\boost\stage\lib文件夹,下面有10个lib库和dll:

此处为MongoDB文档中对于编译boost库的要求原文:
When using bjam, MongoDB expects
variant=debug for debug builds, and variant=release for release builds
threading=multi
link=static runtime-link=static for release builds
address-model=64 for 64 bit(64位的话,把32换为64)。link=static runtime-link=static,boost需要编译成静态库,因为mongodb只会去链接boost的静态库
address-model=64在win7 64环境下此项必须,不加在编译mongodb的c++ client时会出现链接错误。

3、下载mongo2.4.6源码 http://www.mongodb.org/downloads官网下载
编译Mongoclient.lib

cmd命令提示符下,cd到解压后的文件目录,例如我放在了E盘,E:\mongodb-src-r2.4.6,输入命令:
scons –-dd --32 mongoclient.lib // build C++ client driver library
Add --64 or --32 to get the 64- and 32-bit versions, respectively. Replace --release with --dd to build a debug build.
编译后在mongodb\build\win32\32\dd\client_build\生成mongoclient.lib.

4、测试程序
就用Mongodb自带的例子吧,使用VS2010打开E:\mongodb-src-r2.4.6\src\mongo\client\examples中的simple_client_demo.vcxproj,编译,会提示生成simple_client_demo.sln,保存。
使用debug模式,配置工程环境:打开工程->属性,配置Configuration Properties下的VC++ Directories,头文件路径添加C:\boost,Lib库路径添加boost的lib,以及mongodb client的lib:
C:\boost\stage\lib

E:\mongodb-src-r2.4.6\build\win32\32\dd\client_build
进入C/C++下面的Code Generation,将Runtime Library设置为Multi-threaded Debug (/MTd)
进入Linker下面的Input,设置Additional Dependencies,添加ws2_32.lib,psapi.lib,Dbghelp.lib,mongoclient.lib
将E:\mongodb-src-r2.4.6\build\win32\32\dd\mongo\base下生成的error_codes.h和error_codes.cpp文件,拷贝到E:\mongodb-src-r2.4.6\src\mongo\base目录下。
ok,编译、运行.

5、问题解决
error LNK2038: mismatch detected for '_MSC_VER': value '1700' doesn't match value '1600' in error_codes.obj
1>mongoclient_d.lib(dbclient.obj) : error LNK2038: mismatch detected for '_MSC_VER': value '1700' doesn't match value '1600' in error_codes.obj
1>mongoclient_d.lib(assert_util.obj) : error LNK2038: mismatch detected for '_MSC_VER': value '1700' doesn't match value '1600' in error_codes.obj
1>mongoclient_d.lib(jsobj.obj) : error LNK2038: mismatch detected for '_MSC_VER': value '1700' doesn't match value '1600' in error_codes.obj
1>mongoclient_d.lib(status.obj) : error LNK2038: mismatch detected for '_MSC_VER': value '1700' doesn't match value '1600' in error_codes.obj
1>mongoclient_d.lib(mutexdebugger.obj) : error LNK2038: mismatch detected for '_MSC_VER': value '1700' doesn't match value '1600' in error_codes.obj

VS的版本不匹配,lib是在更高级的版本中编译生成的,而使用的时候,是在低级版本中使用的,所以出现了不匹配的错误。例如,我在VS2010 SP1和VS2012的环境下编译的,而使用是在VS2010上使用,所以在编译时,出现了以上问题。

1>mongoclient.lib(stacktrace.obj) : error LNK2001: unresolved external symbol __imp_SymCleanup
1>mongoclient.lib(stacktrace.obj) : error LNK2001: unresolved external symbol __imp_SymGetMoleInfo64
1>mongoclient.lib(stacktrace.obj) : error LNK2001: unresolved external symbol __imp_SymInitialize
1>mongoclient.lib(stacktrace.obj) : error LNK2001: unresolved external symbol __imp_StackWalk64
1>mongoclient.lib(stacktrace.obj) : error LNK2001: unresolved external symbol __imp_SymFromAddr

在工程依赖库中添加Dbghelp.lib

其它问题,看看你手头的编译器、编译出来的boost库版本、mongoclient.lib的版本,是否对应好了。

② win7 安装qt vs2010配置boost,CGAL等

一、安装cmake

1、这一步比较简单,下载安装最新版本cmake-2.8,开始如下安装

2、注意这里选择第二个选项,为所有的用户添加系统变量

3、选择安装到目录 F:\CMake 2.8,个人建议最好安装在C盘目录下。

4、安装完毕后确认一下系统变量中有没有红色框中的目录,若没有需要手动添加进去。

5、cmake安装完毕!
二、安装Boost库

1、下载最新版本,当前为boost_1_55_0

2、按 Win+R组合键输入cmd进入命令窗口:
切换当前目录为boost的安装目录(G:\boost_1_55_0),输入bootstrap.bat

3、执行完上述命令后会在安装目录下生成如下exe文件

4、继续在DOS窗口中输入bjam.exe,程序会根据你当前安装的编译环境(vs2010,vs2012,vs2013)等自动选择与之相适应的库文件和包含文件等。
此过程大概需要20分钟左右。根据下面第二个图片可以算出我的编译环境为MSVC-12.0即VS2013.

5、20分钟左右后可以看到如下界面,说明Boost库配置完成

三、安装CGAL

1、下载CGAL,这里我下载的是CGAL-4.4这个版本(当前最新的)

2、安装位数选择32位
如果选择64位进行安装,则会在以后配置完毕后出现类似“无法识别的外部符号。。。”等问题,很难进行正确配置。所以这里最好全部选择32位进行安装。

3、安装目录我选择C:\Program Files\CGAL-4.4
安装在其他目录时可能会出现用Cmake编译时出现好几外错误。可以尝试通过安装在C盘进行解决。

4、选择如下几项,单击下一步

5、安装完成后可能会出现如下提示,则需要手动添加F:\CGAL-4.4\auxiliary\gmp\lib到Path变量中

6、此时CGAL安装完成
四、用Cmake配置CGAL库

1、打开Cmake软件选择如下目录,注:两个目录是相同的

2、单击“config"-选择如下编译器(默认是32位,与前面安装软件一定要保持一致)

3、单击确定后,出现如下界面说明配置成功

4、找到如下图的这一项,选中,再次单击"config"进行配置

5、单击Generate,此时界面应如下。

6、此时在CGAL安装目录下出现如下文件:CGAL.sln

7、打开此文件,此时编译器会自动组建一个解决方案。如下图

8、选择32位debug模式,按F7进行编译,编译完成后如下图所示,表明CGAL至此完全配置成功。

五、举例测试CGAL

新建一个控制台应用程序,并添加如下代码

#include <iostream>
#include <boost/format.hpp>
#include <QtGui>
#include <CGAL/Qt/GraphicsViewNavigation.h>
#include <QLineF>
#include <QRectF>
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QGraphicsScene scene;
scene.setSceneRect(0,0, 100, 100);
scene.addRect(QRectF(0,0, 100, 100), QPen(QColor(255,0,0)));
scene.addLine(QLineF(0,0, 100, 100));
scene.addLine(QLineF(0,100, 100, 0));
QGraphicsView* view = new QGraphicsView(&scene);
CGAL::Qt::GraphicsViewNavigation navigation;
view->installEventFilter(&navigation);
view->viewport()->installEventFilter(&navigation);
view->setRenderHint(QPainter::Antialiasing);
view->show();
return app.exec();
}

添加包含库目录,操作如下图,注意红色框中的添加内容

添加附加库目录,操作如下图,注意红色框中的添加内容

直接编译运行此时会出现如下错误,别急,我们离成功只差一步了
>test.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QColor::QColor(int,int,int,int)" (__imp_??0QColor@@QAE@HHHH@Z),该符号在函数 _main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QBrush::QBrush(void)" (__imp_??0QBrush@@QAE@XZ),该符号在函数 _main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QBrush::~QBrush(void)" (__imp_??1QBrush@@QAE@XZ),该符号在函数 _main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall QWidget::show(void)" (__imp_?show@QWidget@@QAEXXZ),该符号在函数 _main 中被引用
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual bool __thiscall QWidget::winEvent(struct tagMSG *,long *)" (?winEvent@QWidget@@MAE_NPAUtagMSG@@PAJ@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QWidget::windowActivationChange(bool)" (?windowActivationChange@QWidget@@MAEX_N@Z)
1>G:\Cpp\Midaxis\CGAL512\Debug\CGAL512.exe : fatal error LNK1120: 81 个无法解析的外部命令
添加附加依赖项。
选择“链接器”---“输入”,在其中输入如下添加LIB文件
phonon4.libQAxContainer.libQtCLucene4.libQtCore4.libQtDeclarative4.libQtDesigner4.libQtGui4.libqtmain.libQtOpenGL4.lib

再次编译运行,即可大功告成了!

③ 编译boost后使用到vc10(vs2010)出现找不到lib.obj的问题

好像是默认输出路径的问题。

④ 如何编译&使用boost库

1. 编译

1.2. VS2005编译boost_1_55_0

1.2.1. 使用vs2005的命令行执行:...\boost_1_55_0\bootstrap.bat

1.2.2. 编译动态库

bjam install stage --toolset=msvc-8.0 --stagedir="C:\Boost\boost_vc_80" link=shared runtime-link=shared threading=multi debug release

1.2.3. 编译静态库

bjam install stage --toolset=msvc-8.0 --stagedir="D:\Boost\boost_vc_80" link=static runtime-link=static threading=multi debug release

各种参数详解:

stage:表示只生成库(dll和lib)

install:还会生出包含的头文件

--toolset=msvc-8.0:指定编译器版本,8.0为vs2005,其他VS类推。

--stagedir:指定编译后存放的目录

link:生成动态库/静态库。动态库(shared),静态库(static)

runtime-link:动态/静态C/C++运行时库,同样有shared和static两种组合方式。这样共有4种组合方式,个人根据自己需要选择。

threading:单/多线程,一般都是多线程程序,当然multi了。

debug/release:编译版本,一般2个都需要。

2. 使用

使用静态库:

[cpp] view plain print?
//#define BOOST_ALL_DYN_LINK
#include <boost/bind.hpp>
#include <boost/asio.hpp>
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition.hpp>

使用静态库连接时,仅需要包含的lib为:

debug版:libboost_system-vc80-mt-gd-1_55.lib等一系列包含gd的库。

release版本:libboost_system-vc80-mt-1_55.lib等一系列不包含gd的库。

使用动态库链接:

[cpp] view plain print?
#define BOOST_ALL_DYN_LINK
#include <boost/bind.hpp>
#include <boost/asio.hpp>
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition.hpp>
使用动态库链接时,仅需要包含的lib为:

debug版:boost_system-vc80-mt-gd-1_55.lib,同时在生成的exe加入boost_system-vc80-mt-gd-1_55.dll

release版:boost_system-vc80-mt-1_55.lib,同时在生产的exe路径下加入boost_system-vc80-mt-1_55.dll

⑤ win7下为VS2010安装boost库 命令行运行bootstrap.bat时提示failed to build Boost.Build engine

可能是安装的boost库版本不对,试试其他版本的吧

⑥ 在通过vs2010使用boost的date_time库时出现 error C2039: 'nullptr_t' : is not a member of 'stlpd_std'

1.5.3版本的boost 增加了对nullptr的定义,这是在1.4.7版本中没有的。而且依赖于STL中对nullptr_t的定义,但是STLport5.2.1版本中没有引入空指针的类型,这是C++11的新标准。要学最新的boost库,还是使用微软本身的STL吧,虽然被喷成渣,但总比没有review的代码要厉害。

⑦ 用vc2010编译带有boost的项目出错,不明确符号

boost的一些库,比如share_ptr已经被高版本的stl采纳了.如果你一块儿用编译器当然搞不清你要用那个了.我想你肯定写了这样的东西
using namespace std;
using namespace tr1;
using namespace boost;
实际上两个智能指针是一样的,你只需要用一个即可.如果你一定要两个都用,那么不要写上面的语句.而是应该写std::tr1::xxxx, boost:xxxx

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:750
制作脚本网站 发布:2025-10-20 08:17:34 浏览:1012
python中的init方法 发布:2025-10-20 08:17:33 浏览:719
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:879
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:774
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1127
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:351
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:229
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:912
python股票数据获取 发布:2025-10-20 07:39:44 浏览:876