導航:首頁 > 源碼編譯 > 怎樣單獨編譯某個boost模塊

怎樣單獨編譯某個boost模塊

發布時間:2025-07-21 01:10:23

1. 如何編譯libboost

您好,這樣的:
1、當前boost最新版本為1.55,下載地址http://sourceforge.net/projects/boost/files/boost/1.55.0/
或者從官網(www.boost.org)下載最新版的BOOST源碼,經過測試,2012和2013步驟相同,這里以2012為例。
2、打開VS2012 Native Tools Command,可以從開始--Microsoft Visual Studio 2012找到:將下載的 boost_1_55_0.zip 解壓在F盤,例如 F:\boost_1_53_0,執行bootstrap.bat。
3、編譯,可以簡單的使用b2 install,也可以指定存放目錄,或者尋找網上其它幫助文章。
查看幫助可以輸入:.\b2 --help
比如要開啟多線程編譯:b2 install threading=multi
設置生成的是debug或者release
備註:如果是使用VS2013,請指定輸出庫類型,否則會缺一個lib文件:
"無法打開文件 libboost_thread_vc120_mt_sgd-1_55.lib"。
在2013時,我是使用下面的語句進行編譯:
// 如果要獲取動態庫:
bjam install stage --toolset=msvc-12.0 --stagedir="C:\Boost\boost_vc_120" link=shared runtime-link=shared threading=multi debug release
// 如果是要獲取靜態庫:

bjam install stage --toolset=msvc-12.0 --stagedir="C:\Boost\boost_vc_120" link=static runtime-link=static threading=multi debug release

其中,注意修改--toolset=msvc-12.0,將12.0修改成對應的vs版本號,12.0是VS2013的版本號。

目標地址也要修改成你所需的。

注意,不要漏了install,它會幫你把頭文件集合到一個文件夾中。
編譯過程有一個復制過程,編譯需要的時間比較長,本次編譯過程中,會在C盤根目錄下生成一個boost文件夾,然後包含include和lib文件夾,這就是我們將要使用的頭文件和庫文件。

4、編譯完了我們就使用編譯在C盤中的文件。我將它們拷貝到了F盤,
需要簡單的配置兩個地方:這里使用絕對路徑,也可以配置環境來使用。
5、然後建立了一個工程測試。 在BoostTest中新建一個控制台應用程序,下圖三個文件分別是:
1) 將要使用的boost頭文件和庫文件。 2) 解壓出的boost文件夾,就是使用這個文件夾來進行 1 -- 3步驟的。 3)BoostTest 測試工程。
#include <iostream>

#include <boost/thread/thread.hpp>
void hello()
{
std::cout << "Hello world, I'm a thread!" << std::endl;
}
int main()
{
boost::thread thrd(&hello);
thrd.join();
}
編譯測試工程, 並運行,開始boost之旅吧。

2. VC66安裝BOOST的正則表達式庫和簡單使用,最好有圖文,分數不是問題

在WindowsXP下 VC6.0 編譯安裝Boost庫
基本思路:
一、需要什麼庫:boost有些庫是不用安裝的,即直接#include <>包含頭文件庫就行了,但是有些很有用的庫(thread-線程,regex-正則)需要根據不同的系統做不同的調整,所以必須編譯(即如果你要使用例如正則表達式類的話就需要編譯Boost庫了)。
二、如何編譯:
1、首先,生成bjam.exe。找到那個boostStrap.bat的東西,然後在CMD控制台下運行它,它會生成bjam.exe(類似c++的make,編譯.jam用)
2、然後就可以通過bjam來編譯boost庫了,在命令行下輸入bjam --help看選項。
如果嫌麻煩,可以一次將boost庫需要編譯的全部編譯了,bjam --build-type=complete,生成庫全在stage目錄下。■
可按照上述基本思路去解決。
(據說c6.0不支持目前比較新版本,下面以一些較舊的版本為例)
下面是參考步驟:
在安裝成功之前,我嘗試了許多版本,如1.40,其他的安裝了1.39,1.38,1.37,1.35都嘗試安裝過,但是都沒有成功。這里中原 因限於個人知識水平暫無法深究,但我以為可能是vc6.0無法支持高版本所致。於是我嘗試安裝1.34版本,終於解決安裝問題,由於只想使用其中的正則庫,文內將只以該文件編譯作為實例,其他的可以相同操作。
1、到Boost官方網站可以下載Boost的所有歷史版本,這里我下載的是1.341版。
2、將Boost壓縮包解壓到C:\Boost下。
3、將vc安裝目錄下\Microsoft Visual Studio\VC98\Bin 找到名為VCVARS32.BAT的批處理文件,並將其拷貝到C:\Boost\libs\regex\build目錄下。
4、cmd進入到C:\boost\libs\regex\build目錄下,執行VCVARS32.BAT(目的是使編譯文件命令nmake可用,否則 將提示nmake既不是內部也不是外部命令)後,敲入:nmake -f vc6.mak對其進行編譯,
5、數分鍾後,待編譯完成後,在C:\boost\libs\regex\build目錄下將產生名為vc的文件夾。我們將vc文件夾下的lib文件和 dll文件全部拷貝,在vc安裝目錄下xxx \Microsoft Visual Studio\VC98\下新建文件夾,名稱自定如BoostRegx,將lib和dll文件放入該文件夾中。
6、打開vc6.0選擇「Tools->Options->Directories->Include files,加入包含文件路徑"C:\BOOST"
7、選擇"Tools->Options->Directories->Library file" 編輯添加庫文件路徑 xxx\MICROSOFT VISUAL STUDIO\VC98\BOOSTREGX(這個是前面建立的文件夾BoostRegx的位置)。
8、編寫程序測試:
#include "stdafx.h"
#include <cstdlib>
#include <stdlib.h>
#include <boost/regex.hpp>
#include <string>
#include <iostream>

using namespace std;
using namespace boost;

regex expression("^select ([a-zA-Z]*) from ([a-zA-Z]*)");

int main(int argc, char* argv[])
{
std::string in;
cmatch what;
cout << "enter test string" << endl;
getline(cin,in);
if(regex_match(in.c_str(), what, expression))
{
for(int i=0;i<what.size();i++)
cout<<"str :"<<what.str()<<endl;
}
else
{
cout<<"Error Input"<<endl;
}
return 0;
}
9、由於Boost的Bug問題,寫段程序,頭文件,空間都引用正常,但編譯時編譯器卻告知連接錯誤 LNK1104: cannot open file "libboost_regex-vc6-sgd-1_34_1.lib",這樣可以通過修改Boost.Regx下相關lib文件的文件名改為 libboost_regex-vc6-sgd-1_34_1.lib(與錯誤里相同)即可。
10、再次vc里的編譯,ok了,0 error(s), 0 warning(s)。

我在VC6.0中裝了boost庫,測試程序的時候出現錯誤,說不能打開stdafx.h文件? 這個不是boost的問題,在項目->GUI屬性->c/c++->預編譯頭->創建/使用預編譯頭中選擇創建預編譯頭-確定即可。

《vc6.0環境下編譯Boost 1.34.1》:http://blog.sina.com.cn/s/blog_4bb397fa0100e12a.html
《vc6.0安裝boost1.34.1》:http://student.csdn.net/space.php?uid=119638&do=blog&id=36485

3. 新人求教 驅動源碼編譯安裝

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的版本,是否對應好了。

4. win下boost_1_84_0vs2019x64編譯

在Windows環境下,使用Visual Studio 2019 x64編譯器編譯boost_1_84_0版本庫,可以按照以下步驟進行。
首先,切換到boost_1_84_0源代碼目錄,並運行bootstrap.bat批處理文件來生成b2.exe構建工具。
其次,為了編譯出動態鏈接庫,需要執行以下命令:
```shell
./b2.exe install --toolset=msvc-14.2 link=shared address-model=64 runtime-link=shared debug release architecture=x86 --build-type=complete stage
```
此命令默認將安裝結果放置在C:\Boost目錄下。
接下來,以boost.log為例,介紹如何在CMake項目中引入Boost庫。首先,打開CMake項目文件,並通過CMake配置引入Boost庫的相關路徑,具體配置應根據實際的目錄結構進行調整。
配置完成後,打開由CMake生成的Visual Studio工程文件,並開始編譯過程。
遵循以上步驟,便可以在Windows系統上利用Visual Studio 2019 x64編譯器成功編譯boost_1_84_0版本庫。

閱讀全文

與怎樣單獨編譯某個boost模塊相關的資料

熱點內容
androidgetitem 瀏覽:723
冰箱壓縮機塑料盒 瀏覽:545
android視頻流採集 瀏覽:441
貨車定位為什麼伺服器繁忙 瀏覽:952
多點app抽獎在哪裡 瀏覽:784
apk怎麼解壓縮到手機 瀏覽:800
公司介紹pdf 瀏覽:716
打牌pdf 瀏覽:41
遼寧免費伺服器雲主機 瀏覽:256
什麼辦法可以讓伺服器不崩 瀏覽:181
加密包裹怎麼還看得到信息 瀏覽:582
教育行業程序員被裁員 瀏覽:797
linuxpscp命令 瀏覽:101
程序員技術活嗎 瀏覽:751
汽車壓縮機噪音大怎麼回事 瀏覽:343
怎麼用電信光貓變成列印伺服器 瀏覽:40
編譯器的邏輯階段哪些可以省略 瀏覽:698
蘋果app被移除主屏幕在哪裡能找到 瀏覽:618
編譯器不能打開 瀏覽:485
有道雲pdf 瀏覽:381