Qt和Boost安装方法集萃(是为安装CGAL准备,可能与其它有些许不同)

Qt和Boost安装方法集萃(是为安装CGAL准备,可能与其它有些许不同)
2010年11月24日
  网上安装这两种库的方法杂七杂八的,经过被忽悠千万次后。终于找到了能把这两个库顺利安装的方法。拿出来分享下,大家以后装的时候也就不会和我一样狼狈了:
  1.Boost安装:
  VS2008中编译Boost 1.38出处(http://blog.csdn.net/wrx_2009/archive/2009/06/04/4242841.aspx)
  编译Boost 1.38
  一、下载Boost
  首先,我们到http://www.boost.org去下载 boost1.38的代码包。得到一个压缩包boost_1_38_0.zip,你也可以选择下载其它格式的。
  然后我们把它解压出来,我把它解压在D盘根目录下面:
  二、获取编译工具
  首先,我们需要到bjam.exe这是一个用于编译的工具。
  接下来我将会在Visual Studio 2008 SP1简体中文专业版中编译Boost1.38。我们去开始菜单,使用管理员身份运行Visual Studio 2008 命令提示(非Vista请无视):
  然后我们通过cd等DOS指令进入到:
  Setting environment for using Microsoft Visual Studio 2008 x86 tools.
  C:\Windows\system32>d:
  D:\>cd boost_1_38_0
  D:\boost_1_38_0>cd tools
  D:\boost_1_38_0\tools>cd jam
  D:\boost_1_38_0\tools\jam>cd src
  D:\boost_1_38_0\tools\jam\src>
  然后我们在这个src目录下面执行build.bat:
  D:\boost_1_38_0\tools\jam\src>build.bat
  然后我们稍等一小会儿等待系统自动为我们生成编译工具。
  生成完毕之后src目录下会出现一个bin.ntx86目录。进入这个目录会看见bjam.exe。
  我们把这个bjam.exe拷贝到boost 1.38的根目录即我的D:\boost_1_38_0。
  同上面的方法打开Visual Studio 2008 命令提示,进入D:\boost_1_38_0。通过如下命令我们就可以查看当前版本的Boost的哪些组件需要编译了,因为Boost大部分组件都是以模板的形式存在的,不需要编译:
  D:\boost_1_38_0>bjam --show-libraries
  The following libraries require building:
  - date_time
  - filesystem
  - function_types
  - graph
  - iostreams
  - math
  - mpi
  - program_options
  - python
  - regex
  - serialization
  - signals
  - system
  - test
  - thread
  - wave
  三、编译Boost1.38
  我们再去D盘根目录创建一个我们的目标安装文件夹:D:\BoostLib 1_38
  接下来使用默认的方式将Boost1.38完整编译到目标文件夹:
  D:\boost_1_38_0>bjam install --prefix="D:\BoostLib 1_38" debug
  剩下的参数都用默认的了。敲下回车,好了,开始耐心等待编译完成吧。在此之前请确认您的D盘的剩余空间,要完整编译需要大约3G的剩余空间,主要是会生成很多临时文件,编译连接完之后我们可以删除掉的。曾经在网上看到说需要12G的空间,编译需要好几个小时,可能是现在不一样了吧,呵呵,电脑配置越来越好了。而且整个编译过程也需要一定的时间,编译Debug版本大约需要40-80分钟不等,Release也差不多,根据不同的机器配置会有所不同,当然配置越好越快啦。
  编译的过程中会出现很多的Warning,你可以无视它们,基本上用于学习的目的,你很难很因为这些Warning而使得程序挂掉。
  warning: No toolsets are configured.
  warning: Configuring default toolset "msvc". // 这里由于我们没有选择编译器,所以这里默认选择了VC,由于我们是在Visual Studio 2008的命令提示下面,因此自动选择了VC9。VC2005也是同样的道理,我们选择VC2005的命令提示符就可以了。
  warning: If the default is wrong, your build may not work correctly.
  warning: Use the "toolset=xxxxx" option to override our guess.
  warning: For more configuration options, please consult
  编译的过程中会自动的帮你Copy一些诸如模板头文件等到目标文件夹去:
  这个Copy过程大约需要三分钟。完成之后便开始编译:
  期间会有一些警告,这些都可以无视。开始编译之后会在lib文件夹中出现相应的lib和dll文件,并且由于时间的推移会越来越多,这至少说明您的编译过程正在进行中。而且在编译的过程中还会发生COPY行为。
  大家可以看看Boost生成的这些Lib文件,比如boost_regex-vc90-mt-gd-1_38.lib。它的命名很考究的。
  boost代表这是boost库的组件
  regex代表这个是正则表达式的库
  VC90代表它是什么编译器版本
  mt代表它支持多线程/ Multithreads
  gd代表这是debug版本
  1_38代表了Boost的版本号
  是不是很有艺术感呢?
  另外还有一些这样的Lib文件,比如libboost_iostreams-vc90-mt-gd-1_38.lib。它以libboost开头,这表示这些lib是静态库文件,属于静态连接的库文件。它们没有对应的dll文件。同时您也可以注意到它们都比只具备索引功能的lib大得多。跟动态库版本有啥区别不用我解释了吧?
  O(∩_∩)O~
  Debug版本编译完我生成了107个文件,你有多少个呢?
  好了,接下来我们使用类似的步骤来编译Release版本的Boost:
  Release版本的Lib和Dll的命名和Debug版本的差别就在于没有gd,比如:boost_math_c99f-vc90-mt-1_38.lib。
  在等待了和编译Debug差不多的时间之后,我们的Boost就成功编译了。
  为了符合我们通常SDK的习惯,我们把D:\BoostLib 1_38\include\boost-1_38\下面的boost目录全部拷贝到include目录下面,然后再把boost-1_38这个空的文件夹删除。
  现在我们的所有头文件都在include文件夹下面了,保留boost文件夹只是为了符合boost的习惯;所有的lib和dll都位于lib文件夹下面。
  四、配置IDE和删除临时文件
  但是整个过程还没有结束,我们还需要配置IDE。打开Visual Studio 2008 SP1(其它VC开发平台也类似),选择“工具”,再选择“选项”,然后在“项目和解决方案”下面选择vc++目录,在“包含目录”下面添加Boost的include路径:
  在库文件下面添加Boost的lib路径:
  现在Boost的安装目录已经膨胀到了1.04G:
  源代码的目录,即D:\boost_1_38_0已经变得硕大无比,因为生成了大量的临时文件,我建议您删除该文件夹下面的bin.v2即可。
  爽,编译完成,赶快来段代码,试试:
  #include
  #include
  using namespace std;
  using namespace boost;
  int main()
  {
  cout>strBirthday;
  try
  {
  gregorian::date birthday( gregorian::from_simple_string(strBirthday) );
  gregorian::date today( gregorian::day_clock::local_day() );
  gregorian::days days_alive = today - birthday;
  if( days_alive Windows的DLL,lib等二进制库。
  再者,VC编译器比GCC 还是要强劲很多,并且调试器异常强大。Qt Creator虽然很酷,目前还很粗糙。很多人也更为熟悉VS的界面。用VS编译出二进制库:
  1. 下载并安装 qt-sdk-win-opensource-2010.02.1.exe,安装到默认的 c:\qt\2010.02.1。它包含了MingGW和 Qt Creator,以及预编译好的二进制文件(用GCC编译的)。你可以直接使用Qt Creator 开始开发工作,不需要任何额外的配置。
  2. 将整个目录 c:\qt\2010.02.1 拷贝一份到 c:\qt\4.6.2-vc。我们将会修改目录c:\qt\4.6.2-vc,使用VC++来编译出所需要的库。这两个目录可以同时存在,Qt使用c:\qt\2010.02.1,Visual Studio 使用 c:\qt\4.6.2-vc。
  3. 修改 C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\下的 vsvars32.bat,在环境变量PATH中添加Qt的目录,如 c:\qt\4.5.0-vc\qt,在INCLUDE 添 加上c:\qt\4.5.0-vc\qt\include , 在LIB添加 c:\qt\4.5.0-vc\qt\include, 如:
  @set PATH=C:\Qt\4.6.2-vc\qt;c:\Program Files\Microsoft Visual Studio 8\Common7\IDE;c:\Program Files\Microsoft Visual Studio 8\VC\BIN;c:\Program Files\Microsoft Visual Studio 8\Common7\Tools;c:\Windows\Microsoft.NET\Framework\v3.5;c:\Windows\Microsoft.NET\Framework\v2.0.50727;c:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;%PATH%
  @set INCLUDE=C:\Qt\4.6.2-vc\qt\include;c:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\INCLUDE;c:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;%INCLUDE%
  @set LIB=C:\Qt\4.6.2-vc\qt\lib;c:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\LIB;c:\Program Files\Microsoft Visual Studio 8\VC\LIB;%LIB%
  打开一个cmd命令行窗口,把这个文件拖过来执行,这样,你打开的cmd就具有上面设置的环境变量了,但是这些变量只针对你当前的cmd,不会更改本机配置,所以,不要关闭cmd窗口,你需要在这个CMD窗口中完成接下来的命令。
  (原文是按照第三步来做的,第一次的时候我也是按这一步骤编译,但由于出了后面的问题,便手动在系统环境变量的path中添加C:\Qt\qt-4.3.1\bin,注意,这里应该对应安装目录,其实效果跟上面的是一样的)
  4. 执行
  c:\> cd c:\qt\4.5.0-vc\qt
  c:\qt\4.5.0-vc\qt> configure -platform win32-msvc2005
  上面这行命令,你可以按自己的需要修改,但注意一定要指明 -platform 后的参数,指明想要配置成那个版本的VS。这一步要花点时间,大概60分钟。
  5. 输入 nmake,回车,开始编译。这一步跟漫长,我的大概编译 了3个小时~~
  注意:如果你是Windows 7下,这里多半会失败,因为Win 7 SDK有Bug,在binary没有resouce区域的时候mt程序是不能把manifest添加到binary中的(参考:http://download.microsoft.com/download/8/8/0/8808A472-6450-4723-9C87-977069714B27/ReleaseNotes.Htm),所以我们需要做一些修改才行,
  第一步,在CMD下执行如下命令
  c:\qt\4.6.2-vc\qt>echo.>hello.rc
  c:\qt\4.6.2-vc\qt> rc.exe /r hello.rc
  得到 c:\qt\4.6.2-vc\qt\hello.res 资 源文件。
  第二步,修改qmake配置文件,使得Makefile的链接命令中会把hello.res一并链接到binary中。修改mkspecs\win32-msvc2005目录下的qmake.conf文件第52行为
  QMAKE_LFLAGS = /NOLOGO C:\Qt\4.6.2-vc\qt\hello.res
  这样任何link命令都必然会链接hello.res文件。
  然后才能输入nmake开始编译。
  6. 安装官方的VS插件qt-vs-addin-1.0.0-beta.exe,
  7. 启动 Visual Studio,选择菜单“Qt->Qt Options”,在” Qt Verions ”选项卡点击 “Add”,Version Name随便填,例如 “qt4.6.2-vc”,路径则输入 “C:\Qt\4.6.2-vc\qt”。(网上的资料有 说要建立环境变量QTDIR= C:\Qt\4.6.2-vc\qt,我个人认为是不必要的)。
  8. 现在你的Visual Studio 完全具备了Qt的所有功能,新建一个Qt 工程编译运行试一试!
  (编译好后,在VS下点击Debug-Debug without debuggine可以看见程序运行的效果,不过
  如果直接到debug目录下双击这个exe文件,会提示找不到QtCore4d.dll,这时你需要把C:\Qt\4.5.0-vc\qt\bin加入到PATH环境变量,这目录下还有QtCore4.dll,都是上面编译出来的)。
  不过你现在的环境是集成了LGPL版Qt的VS,跟商业版的还是有点不 同。例如Qt Desiner(资源设计器)不是嵌入到VS得,需要通过菜单“Qt->Launch Desiner”来执行(商业版直接双击.ui文件就会启动Qt Desiner)。不过这无关紧要,只是多点几下鼠标而已。
  点击“Qt->Launch Linguist”可以启动Qt Linguist,它是一款本地化工具,也十分有用。
  接着,遇到了如下问题:
  + expand sourceview plaincopy to clipboardprint?
  正在创建库 ..\..\..\..\lib\QtWebKitd4.lib 和对象 ..\..\..\..\lib\QtWebKitd4.e
  xp
  QNetworkReplyHandler.obj : error LNK2001: 无法解析的外部符号 "public: virtual st
  ruct QMetaObject const * __thiscall WebCore::FormDataIODevice::metaObject(void)c
  onst " (?metaObject@FormDataIODevice@WebCore@@UBEPBUQMetaObject@@XZ)
  QNetworkReplyHandler.obj : error LNK2001: 无法解析的外部符号 "public: virtual vo
  id * __thiscall WebCore::FormDataIODevice::qt_metacast(char const *)" (?qt_metac
  ast@FormDataIODevice@WebCore@@UAEPAXPBD@Z)
  QNetworkReplyHandler.obj : error LNK2001: 无法解析的外部符号 "public: virtual in
  t __thiscall WebCore::FormDataIODevice::qt_metacall(enum QMetaObject::Call,int,v
  oid * *)" (?qt_metacall@FormDataIODevice@WebCore@@UAEHW4Call@QMetaObject@@HPAPAX
  @Z)
  QNetworkReplyHandler.obj : error LNK2001: 无法解析的外部符号 "public: virtual st
  ruct QMetaObject const * __thiscall WebCore::QNetworkReplyHandler::metaObject(vo
  id)const " (?metaObject@QNetworkReplyHandler@WebCore@@UBEPBUQMetaObject@@XZ)
  QNetworkReplyHandler.obj : error LNK2001: 无法解析的外部符号 "public: virtual vo
  id * __thiscall WebCore::QNetworkReplyHandler::qt_metacast(char const *)" (?qt_m
  etacast@QNetworkReplyHandler@WebCore@@UAEPAXPBD@Z)
  QNetworkReplyHandler.obj : error LNK2001: 无法解析的外部符号 "public: virtual in
  t __thiscall WebCore::QNetworkReplyHandler::qt_metacall(enum QMetaObject::Call,i
  nt,void * *)" (?qt_metacall@QNetworkReplyHandler@WebCore@@UAEHW4Call@QMetaObject
  @@HPAPAX@Z)
  QNetworkReplyHandler.obj : error LNK2019: 无法解析的外部符号 "protected: void __
  thiscall WebCore::QNetworkReplyHandler::processQueuedItems(void)" (?processQueue
  dItems@QNetworkReplyHandler@WebCore@@IAEXXZ),该符号在函数 "public: void __thisc
  all WebCore::QNetworkReplyHandler::setLoadMode(enum WebCore::QNetworkReplyHandle
  r::LoadMode)" (?setLoadMode@QNetworkReplyHandler@WebCore@@QAEXW4LoadMode@12@@Z)
  中被引用
  FrameLoaderClientQt.obj : error LNK2019: 无法解析的外部符号 "protected: void __t
  hiscall QWebPage::unsupportedContent(class QNetworkReply *)" (?unsupportedConten
  t@QWebPage@@IAEXPAVQNetworkReply@@@Z),该符号在函数 "public: virtual void __this
  call WebCore::FrameLoaderClientQt::download(class WebCore::ResourceHandle *,stru
  ct WebCore::ResourceRequest const &,struct WebCore::ResourceRequest const &,clas
  s WebCore::ResourceResponse const &)" (?download@FrameLoaderClientQt@WebCore@@UA
  EXPAVResourceHandle@2@ABUResourceRequest@2@1ABVResourceResponse@2@@Z) 中被引用
  FrameLoaderClientQt.obj : error LNK2019: 无法解析的外部符号 "protected: void __t
  hiscall QWebPage::downloadRequested(class QNetworkRequest const &)" (?downloadRe
  quested@QWebPage@@IAEXABVQNetworkRequest@@@Z),该符号在函数 "public: virtual voi
  d __thiscall WebCore::FrameLoaderClientQt::startDownload(struct WebCore::Resourc
  eRequest const &)" (?startDownload@FrameLoaderClientQt@WebCore@@UAEXABUResourceR
  equest@2@@Z) 中被引用
  ..\..\..\..\lib\QtWebKitd4.dll : fatal error LNK1120: 9 个无法解析的外部命令
  NMAKE : fatal error U1077: “"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\
  link.EXE"”: 返回代码“0x460”
  Stop.
  NMAKE : fatal error U1077: “"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\
  nmake.exe"”: 返回代码“0x2”
  Stop.
  NMAKE : fatal error U1077: “cd”: 返回代码“0x2”
  Stop.
  正在创建库 ..\..\..\..\lib\QtWebKitd4.lib 和对象 ..\..\..\..\lib\QtWebKitd4.e
  xp
  QNetworkReplyHandler.obj : error LNK2001: 无法解析的外部符号 "public: virtual st
  ruct QMetaObject const * __thiscall WebCore::FormDataIODevice::metaObject(void)c
  onst " (?metaObject@FormDataIODevice@WebCore@@UBEPBUQMetaObject@@XZ)
  QNetworkReplyHandler.obj : error LNK2001: 无法解析的外部符号 "public: virtual vo
  id * __thiscall WebCore::FormDataIODevice::qt_metacast(char const *)" (?qt_metac
  ast@FormDataIODevice@WebCore@@UAEPAXPBD@Z)
  QNetworkReplyHandler.obj : error LNK2001: 无法解析的外部符号 "public: virtual in
  t __thiscall WebCore::FormDataIODevice::qt_metacall(enum QMetaObject::Call,int,v
  oid * *)" (?qt_metacall@FormDataIODevice@WebCore@@UAEHW4Call@QMetaObject@@HPAPAX
  @Z)
  QNetworkReplyHandler.obj : error LNK2001: 无法解析的外部符号 "public: virtual st
  ruct QMetaObject const * __thiscall WebCore::QNetworkReplyHandler::metaObject(vo
  id)const " (?metaObject@QNetworkReplyHandler@WebCore@@UBEPBUQMetaObject@@XZ)
  QNetworkReplyHandler.obj : error LNK2001: 无法解析的外部符号 "public: virtual vo
  id * __thiscall WebCore::QNetworkReplyHandler::qt_metacast(char const *)" (?qt_m
  etacast@QNetworkReplyHandler@WebCore@@UAEPAXPBD@Z)
  QNetworkReplyHandler.obj : error LNK2001: 无法解析的外部符号 "public: virtual in
  t __thiscall WebCore::QNetworkReplyHandler::qt_metacall(enum QMetaObject::Call,i
  nt,void * *)" (?qt_metacall@QNetworkReplyHandler@WebCore@@UAEHW4Call@QMetaObject
  @@HPAPAX@Z)
  QNetworkReplyHandler.obj : error LNK2019: 无法解析的外部符号 "protected: void __
  thiscall WebCore::QNetworkReplyHandler::processQueuedItems(void)" (?processQueue
  dItems@QNetworkReplyHandler@WebCore@@IAEXXZ),该符号在函数 "public: void __thisc
  all WebCore::QNetworkReplyHandler::setLoadMode(enum WebCore::QNetworkReplyHandle
  r::LoadMode)" (?setLoadMode@QNetworkReplyHandler@WebCore@@QAEXW4LoadMode@12@@Z)
  中被引用
  FrameLoaderClientQt.obj : error LNK2019: 无法解析的外部符号 "protected: void __t
  hiscall QWebPage::unsupportedContent(class QNetworkReply *)" (?unsupportedConten
  t@QWebPage@@IAEXPAVQNetworkReply@@@Z),该符号在函数 "public: virtual void __this
  call WebCore::FrameLoaderClientQt::download(class WebCore::ResourceHandle *,stru
  ct WebCore::ResourceRequest const &,struct WebCore::ResourceRequest const &,clas
  s WebCore::ResourceResponse const &)" (?download@FrameLoaderClientQt@WebCore@@UA
  EXPAVResourceHandle@2@ABUResourceRequest@2@1ABVResourceResponse@2@@Z) 中被引用
  FrameLoaderClientQt.obj : error LNK2019: 无法解析的外部符号 "protected: void __t
  hiscall QWebPage::downloadRequested(class QNetworkRequest const &)" (?downloadRe
  quested@QWebPage@@IAEXABVQNetworkRequest@@@Z),该符号在函数 "public: virtual voi
  d __thiscall WebCore::FrameLoaderClientQt::startDownload(struct WebCore::Resourc
  eRequest const &)" (?startDownload@FrameLoaderClientQt@WebCore@@UAEXABUResourceR
  equest@2@@Z) 中被引用
  ..\..\..\..\lib\QtWebKitd4.dll : fatal error LNK1120: 9 个无法解析的外部命令
  NMAKE : fatal error U1077: “"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\
  link.EXE"”: 返回代码“0x460”
  Stop.
  NMAKE : fatal error U1077: “"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\
  nmake.exe"”: 返回代码“0x2”
  Stop.
  NMAKE : fatal error U1077: “cd”: 返回代码“0x2”
  Stop.
  解决方法:删除QT目录下的mocinclude.tmp文件,大致路径如下:src/3rdparty/webkit/WebCore/tmp/moc/{debug,release}_shared/mocinclude.tmp,再nmake一次,之后又出现了如下错误:
  + expand sourceview plaincopy to clipboardprint?
  api\qscriptextensionplugin.h(43): Error: Undefined interface
  NMAKE : fatal error U1077: “C:\Qt\4.6.2-vc\qt\bin\moc.exe”: 返回代码“0x1”
  Stop.
  NMAKE : fatal error U1077: “"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\
  nmake.exe"”: 返回代码“0x2”
  Stop.
  NMAKE : fatal error U1077: “cd”: 返回代码“0x2”
  Stop.
  api\qscriptextensionplugin.h(43): Error: Undefined interface
  NMAKE : fatal error U1077: “C:\Qt\4.6.2-vc\qt\bin\moc.exe”: 返回代码“0x1”
  Stop.
  NMAKE : fatal error U1077: “"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\
  nmake.exe"”: 返回代码“0x2”
  Stop.
  NMAKE : fatal error U1077: “cd”: 返回代码“0x2”
  Stop.
  解决方法是将:qt/src/script/tmp/moc/debug_shared/mocinclude.tmp、
  qt/src/script/tmp/moc/release_shared/mocinclude.tmp删除,然后继续编译就ok了。
  本文来自CSDN博客,转载请标明出处:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值