[心得] boost 編譯方法心得
boost 這個 lib 應該很多人用吧,但是版上都沒個完整的編譯安裝心得
所以我把自己在 windows 上安裝 n 次的心得 po 上來給大家參考一下
1.首先從官網下載 boost 的原始碼和 bjam 的 binary
把 boost 解開到某資料夾,如 d:\boost_1_36
再把 bjam 的執行檔也解到同一個資料夾下
2.進到 d:\boost_1_36 的資料夾下,用記事本打開Jamroot檔
(Jamroot 好像是用 Python 寫的?? 前面一半是 bjam 的說明)
在裡面找到一段這樣子的片段:
local default-build,complete =
debug release
<threading>single <threading>multi
<link>shared <link>static
<runtime-link>shared <runtime-link>static
這一段就是 bjam --build-type=xxx的內容,依你需要的新增一個
像我平常不想用到 debug(多了debug多了1~2g的容量)
而且我想要 static-link,不想用 dll,所以我改成如下:
local default-build,mybuild =
release
<threading>multi
<link>static
(這邊注意,有版胞發現 , 和 mybuild 之間不能有空白)
(否則會導致失效,而編出 debug shard library)
(這部分感謝 zxvc 和 ycjcsie 發現的問題)
這一段是自由發揮的,你想要編啥東西出來就改一改
不然就是直接用他 complete 的設定
這裡我沒發現到,有另一個地方也要改,感謝 zxvc 大大的提醒
==========================================================
在同一個檔案中,在剛剛那一段的上面,有這麼一段:
if ! ( $(build-type) in minimal complete )
{
build-type = minimal ;
}
在 complete 後面,再加上自己設定的 build-type,變成
if ! ( $(build-type) in minimal complete mybuild )
這樣 bjam 才會使用這個 build-type,( mybuild 後需要有空白)
實在是萬分感謝 zxvc 大大。
==========================================================
3.接下來,用命令提示字元,來到 d:\boost_1_36 下面
可以先執行 bjam --show-libraries
看有哪些 lib 是需要 compile 的
(如果你不用那些 lib,那你可以直接離開這篇文章了 =.=)
4.再來,決定你要安裝的目錄,和使用的 compiler
像我是要安裝到 d:\boost,我的 compiler 是 mingw
(如果你不想用安裝,也是可以的,就是少了 copy include 目錄)
5.再來就交給 bjam 了,例如:我只要 regex 和 system 這兩個 lib
要安裝的這樣子下:
bjam --prefix=d:\boost --build-type=mybuild --toolset=gcc
--with-regex --with-system install
不要安裝的就這樣子下:
bjam --build-type=mybuild --toolset=gcc
--with-regex --with-system stage
然後等他 compile 完,安裝的人就到 d:\boost 去找檔案
用 stage 的人,就在 d:\boost_1_36\stage 是你要的 lib
6.最後,就是看你要不要複製 include 和 lib 到 mingw 的目錄下了
這部分對 lib 很熟的大大,應該都知道要怎麼搞了
7.附註:因為我不喜歡 boost 編出來是 .lib 和 .dll,而且很多個
這樣我要 link 的時候要打很長一串,加上我是個懶人
所以我就發現 .o 都在 d:\boost_1_36\bin.v2 裡面
還很貼心的把各種版本都分別放在不同的資料夾下面
於是我就到裡面去,然後我要的是 release 的 static-link
所以我進到最深層的目錄下,把我要的所有 lib 的 obj檔都複製出來
他的目錄是長這樣:
..\bin.v2\libs\<lib名>\build\<toolset>\<debug or release>\
<link-static or not>\<single or multi thread>\*.o
我把 copy 出來的 .o 都放在一個資料夾下,然後到那個資料夾
下這行:
ar -q libboost.a *.o
我要的 .a 就產生了,接下來就是把它丟到 mingw\lib 下
然後再把 d:\boost_1_36 的 boost 丟到 mingw\include
這樣我以後只要 -lboost 就ok了,再也不用打那長一串了
(不過只適用我這樣子的懶人)
8.細節我沒有說的很清楚,最好是看一下 bjam --help 的說明
感謝各位耐心看完,有錯請不吝指正,謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.225.3.13
推
09/11 12:14, , 1F
09/11 12:14, 1F
→
09/11 12:14, , 2F
09/11 12:14, 2F
推
09/11 12:45, , 3F
09/11 12:45, 3F
→
09/11 13:10, , 4F
09/11 13:10, 4F
推
09/11 13:13, , 5F
09/11 13:13, 5F
→
09/11 13:32, , 6F
09/11 13:32, 6F
推
09/11 17:08, , 7F
09/11 17:08, 7F
推
09/11 23:20, , 8F
09/11 23:20, 8F
※ 編輯: ewn 來自: 125.225.20.93 (09/13 19:31)
※ 編輯: ewn 來自: 125.225.16.70 (09/15 12:29)
推
06/23 12:48, , 9F
06/23 12:48, 9F
→
06/23 12:49, , 10F
06/23 12:49, 10F
→
06/23 12:50, , 11F
06/23 12:50, 11F
→
06/23 12:51, , 12F
06/23 12:51, 12F
→
06/23 12:51, , 13F
06/23 12:51, 13F
推
06/23 14:18, , 14F
06/23 14:18, 14F
→
06/23 14:19, , 15F
06/23 14:19, 15F
→
06/23 14:19, , 16F
06/23 14:19, 16F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
7
16
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
-2
11