日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

boost1.79编译

發布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 boost1.79编译 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

系列文章目錄

文章目錄

  • 系列文章目錄
  • 前言
  • 一、編譯
    • 1.使用vs2019 命令行,用管理員身份運行
    • 2.執行命令
    • 2.第二種方法
    • 3.boost編譯動態庫
  • 參考

前言

boost自帶一套編譯工具bjam,bjam本身是跨平臺的,并且也要自行編譯出來。在boost目錄下有bootstrap.sh和bootstrap.bat兩個腳本分別用來編譯*nix和windows下的bjam。bootstrap腳本可以傳入參數,以在編譯bjam過程中生成特定的編譯boost的配置。這些配置保存在新生成的project-config.jam里,但還可以在運行bjam的時候再傳入參數來覆蓋。同時生成的b2是bjam的代理,運行哪個的效果都差不多。

一、編譯

1.使用vs2019 命令行,用管理員身份運行

2.執行命令

1.解壓boost文件,使用編譯器的命令行進入解壓后的根目錄

2.敲入命令.\bootstrap.bat (on Windows)或者./bootstrap.sh (on other operating systems)

3.執行./b2 install --prefix=PREFIX

PREFIX就是你要安裝的目錄位置,Win32默認在 C:\Boost;Unix默認在 /usr/local on Unix. Linux
注意:執行./b2 install --prefix=PREFIX 我發現在我的c盤下面并沒有出現:C:\Boost
于是我把命令改成:./b2 install --prefix=E:\boost\boost1.79\boost_1_79_0_build
確實在E:\boost\boost1.79\boost_1_79_0_build生成了 include 和lib但是并沒有生成相應的dll

4.生成lib和dll
這時只會生成lib而沒有生成dll
命令行中敲入:./b2 install --prefix=“E:\boost\boost_1_74_0_build\x64” --build-type=complete --toolset=msvc-14.2 threading=multi --build-type=complete address-model=64
這時在E:\boost\boost_1_74_0_build\x64路徑下就會生成lib和dll

2.第二種方法

當在第一種方法執行:bjam stage --toolset=msvc-14.2 --stagedir=“D:\boost_lib” link=static runtime-link=static threading=multi debug release

會報錯:bjam : 無法將“bjam”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱。請檢查名稱的拼寫,如果包括路徑,請確保路徑正確
,然后再試一次。
所在位置 行:1 字符: 1

  • bjam stage --toolset=msvc-14.2 --stagedir=“D:\boost_lib” link=static …
  • + CategoryInfo : ObjectNotFound: (bjam:String) [], CommandNotFoundException+ FullyQualifiedErrorId : CommandNotFoundException

于是執行重新換一個命令:
./b2 toolset=msvc-14.1 link=static runtime-link=shared threading=multi variant=debug
./b2 install --prefix=“E:\boost\boost1.79\boost_1_79_0_build\vc141”

3.boost編譯動態庫

使用:./b2 toolset=msvc-14.1 link=static runtime-link=shared threading=multi variant=debug
./b2 install --prefix=“E:\boost\boost1.79\boost_1_79_0_build\vc141”
會發現只能生成lib庫和include頭文件,并不能生成dll動態庫
如果,但是運行exe程序時又需要動態庫,所以我們會需要boost生成動態庫
生成動態庫的命令:
./b2 toolset=msvc-14.1 link=shared runtime-link=shared threading=multi variant=debug
./b2 stage --prefix=“E:\boost\boost1.79\boost_1_79_0_build\vc141”
即把 “link=static“,改成
link=shared

如果即生成動態庫,又要生成靜態庫./b2 toolset=msvc-14.1 link=stage runtime-link=shared threading=multi variant=debug

./b2 install --prefix=“E:\boost\boost1.79\boost_1_79_0_build\vc141”

參考

luckyum

指令格式大概如下:
./b2 toolset=msvc-14.1 link=static runtime-link=shared threading=multi variant=debug
./b2 install --prefix=“D:\ScanSource\download\Boost\vc141”
重要參數
(1)stage/install:
stage表示只生成庫(dll和lib),install會生成并安裝到系統中,包含頭文件的include目錄和CMake文件夾。

(2)toolset:
指定編譯器,可選的如minGW、msvc等。
vs2017 : msvc-14.1,vs2015 : msvc-14.0, linux :gcc

(3)stagedir/prefix:
stage時使用stagedir,install時使用prefix,表示編譯生成文件的路徑,與安裝路徑。

(4)link:
生成動態鏈接庫/靜態鏈接庫。生成動態鏈接庫需使用shared方式,生成靜態鏈接庫需使用static方式。一般boost庫可能都是以static方式編譯,因為最終發布程序帶著boost的dll感覺會比較累贅。

(5)runtime-link:
動態/靜態鏈接運行時庫。同樣有shared和static兩種方式,標記如何連接C++運行庫,是包含就用靜態,使用系統運行庫就用動態。

(6)architecture
表示架構,也就是你的CPU架構,所以是x86或者arm

(7)address-model
地址長度,32表示編譯32位的庫文件,64表示編譯64位的庫文件

(8)threading:
單/多線程編譯。一般都寫多線程程序,當然要指定multi方式了;如果需要編寫單線程程序,那么還需要編譯單線程庫,可以使用single方式。

(9)variant:
編譯debug/release版本。一般都是程序的debug版本對應庫的debug版本,所以兩個都編譯。

關于生成boost文件名稱的說明,解決調用boost庫找不到文件的問題:
libboost_atomic-vc141-mt-x32-1_70.lib
libboost_atomic-vc141-mt-x64-1_70.lib
libboost_atomic-vc141-mt-gd-x64-1_70.lib
libboost_atomic-vc141-mt-gd-x32-1_70.lib

(1)–build-type=complete時link,runtime-link3種組合下debug, release的多線程版本都生成出來了除此之外還生成了link=static,runtime-link=static的debug, release的單線程版本

(2)Boost庫的使用方式link決定了生成的庫的格式:lib(靜態鏈接庫-static), dll(動態鏈接庫-share)

當link是static時,生成的靜態庫: libboost_*****.lib

當link是share時,生成的動態鏈接庫:boost_****.dll 和對應的 libboost_*****.lib

(3)Boost庫的編譯中runtime-link,決定了生成庫與C/C++庫的連接方式

當runtime-link是static使: 生成的庫文件名有 s

當runtime-link是share使: 生成的庫文件名沒有s

(4)link以及與runtime-link缺省的設置是:

link是靜態的(便于整合到應用中,避免單獨移動boost的相關動態連接庫)

runtime-link是share的,這樣可以動態調用c/C++運行時庫,方便

(5)degug版本的庫名稱: 含有gd

release版本中的庫名稱;不含有gd

(6)threading,設置mutl 多線程的庫,則庫名稱包含:mt

如果是單線程,則沒有mt

(7)我們還可以分析一下 boost 庫的命名特點

以“lib”開頭的是“link=static”版本(靜態鏈接庫版本,沒有dll),而直接以“boost”開頭的是“link=shared”版本(動態鏈接庫版本,包含lib和dll)。
所有的庫都含有"boost"前綴。
緊隨其后的是boost庫名稱(比如date_time庫)。
然后是編譯器的版本,與庫名稱之間以"-“而不是下劃線”“分隔(比如 -vc120)。
有“mt”的為“threading=multi”版本,沒有的則是“threading=single”版本。
有“s”的為“runtime-link=static”版本,沒有的則是“runtime-link=shared”版本。
有“gd”的為debug版本,沒有的則是release版本。
所有的庫都含有boost庫的版本號結尾(比如1_56,其中的”.“以下劃線”"代替)
在IDE中關聯Boost庫,我的項目都是采用CMake方式創建的
QTCreator 中點擊左側的項目菜單,在CMake參數表格中添加
Boost_INCLUDE_DiR 設置為 “boost_1_70_0\include\boost-170”
Boost_DIR 設置成 “boost_1_70_0\lib\cmake\Boost-1.70.0”
點擊 apply Configuration Changes,編譯參數。

MSVC 中,先使用CMake-GUI工具打開CMake項目,設置參數同樣,
點擊Configure,編譯參數。

CMakeLists.txt 包括

find_package(Boost 1.70.0 REQUIRED)
if(Boost_FOUND)
set(Boost_LIBRARY_DIRS D:/ScanSource/download/Boost/vc141_64/lib)
message(Boost_INCLUDE_DIRS " ${Boost_INCLUDE_DIRS}“)
message(Boost_LIBRARY_DIRS " ${Boost_LIBRARY_DIRS}”)
endif()

include_directories(BoostINCLUDEDIRS)linkdirectories({Boost_INCLUDE_DIRS}) link_directories(BoostI?NCLUDED?IRS)linkd?irectories({Boost_LIBRARY_DIRS})
注意事項
1、CMake網站有引用Boost的約定參數說明,引用過程中出錯可以參考文檔說明。
2、注意使用的Boost的版本,路徑是否與項目一致,出現錯誤一般都是沒有找到頭文件路徑、沒有找到Lib路徑、使用的32位與64位版本錯誤,使用的動態庫、靜態庫版本錯誤。
通過生成的文件名可以區分,了解“mt”“s”“gd” ,“lib”“dll”的意思,如果一切順利就可以放心使用了。

如果只是需要Release版本有一個Windows Binaries的下載鏈接,解壓就好了。。。。https://dl.bintray.com/boostorg/release/1.70.0/binaries/

編譯成功后運行執行檔,如果出現

error while loading shared libraries: libboost_system.so.1.52.0: cannot open shared object file: No such file or directory

是因為系統在當前注冊的搜索路徑{PATH}中找不到所需的共享庫。PATH是Enviroment Variable:

echo “$HOME”

echo “$PATH”

輸出環境變量的值;

修改或設置則可以用export指令:

export PATH=${PATH}:/usr/local/lib:/usr/local/include

總結

以上是生活随笔為你收集整理的boost1.79编译的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。