其實(shí)這個問題酪碘,我之前解決過麸塞,我們針對的場景是如何在WINDOWS上進(jìn)行這項工作笨奠,這項工作的一個附帶的工作管呵,如何引用BOOST.PYTHON庫的文件梳毙。
這里我們有參考網(wǎng)站:
編譯Boost Python
BOOST 在windows的編譯及配置(VS2010) [大三四八九月實(shí)習(xí)]
我們綜合兩篇文章,我們使用的命令是:
.\bjam.exe stage --toolset=msvc-14.0 --build-type=complete --with-python address-model=64 link=static runtime-link=shared threading=multi debug release
我們解釋兩個選項:--toolset=msvc-14.0表明使用vs2015的編譯器編譯捐下,address-model=64表明編譯成64位的
在實(shí)際的工作中账锹,我們發(fā)現(xiàn)需要加宏代碼才能正常的編譯連接boost.python庫
#define BOOST_PYTHON_STATIC_LIB
#include "boost\python.hpp"
宏的定義的目的是為了讓boost.python模塊知道連接的方式,我們針對之前的編譯方式坷襟,這里必須采取的鏈接方式是BOOST_PYTHON_STATIC_LIB
我之所以編譯這個庫奸柬,主要原因是我的公司希望能夠給python寫個擴(kuò)展的庫,然后使用這個庫給顧問組搭建相應(yīng)的項目
這里需要提醒三點(diǎn)婴程,第一必須嚴(yán)格執(zhí)行上一部分的內(nèi)容鸟缕,才有可能成功,第二點(diǎn)排抬,必須將編譯好的文件放到python的安裝目錄下的DLLs文件夾下懂从,注意所有相關(guān)的DLL都必須放到里面,才有可能成功蹲蒲,第三番甩,模塊名和pyd文件的名字必須保持一致。
如果想找一個什么例子届搁,請參考Boost.Python - 1.63.0
最后缘薛,如果你能不使用boost庫,請不要用它卡睦,你可以把它當(dāng)做一個學(xué)習(xí)的資料宴胧,之所以建議你不用,是因?yàn)樗陌姹疽恢痹诟拢ㄖ荒苷f明一點(diǎn)表锻,這玩意不穩(wěn)定)恕齐,而且保不齊會出現(xiàn)向下不兼容的現(xiàn)象。
雖然瞬逊,他的組織非常有威望(聽說都是些C++標(biāo)準(zhǔn)委員會的成員)显歧,但是,他并不是一個十分權(quán)威的機(jī)構(gòu)确镊,能夠引領(lǐng)潮流的機(jī)構(gòu)士骤,所以不要輕易使用這里面的東西。
吐槽一下蕾域,python是一門非常清晰簡單的語言拷肌,或者不應(yīng)該這樣說,應(yīng)該說python的語言設(shè)計是非常清晰簡單的,之所以這樣說的原因是python解釋器的實(shí)現(xiàn)有多個版本巨缘,普遍采用的是基于C語言的版本厢绝。而我要吐槽的是,python的版本差異性带猴。python的版本差異導(dǎo)致了一個非常嚴(yán)重的問題昔汉,就是版本遷移的問題,這個問題的本來就不應(yīng)該是問題拴清,但是對于python這朵奇葩靶病,他就成了問題,這里我想說的第二點(diǎn)是口予,導(dǎo)致這個差異的本質(zhì)原因是娄周,python語言的設(shè)計初衷應(yīng)該不是為了大型應(yīng)用而產(chǎn)生的,我的邏輯是沪停,如果你是為了大型應(yīng)用煤辨,那么你應(yīng)該注重你的版本的兼容性,而不應(yīng)該產(chǎn)生這么多版本差異木张,現(xiàn)如今python語言還是在發(fā)展众辨,你看到他的每個迭代版本還是有一定的差異,從這個意義上說舷礼,我并不推薦使用python去搭建一個應(yīng)用程序框架鹃彻,當(dāng)然你做些小的項目還是可以的,畢竟妻献,你不會有太多的擔(dān)憂蛛株。雖然python提供了大量的可實(shí)用的庫,但是在版本兼容方面你會發(fā)現(xiàn)python就是一個坑育拨!快速迭代開發(fā)谨履,應(yīng)該選用一個更好的語言!
以前對于遇到的計算機(jī)的問題熬丧,我都會覺得有相應(yīng)的解決方案笋粟,而并不考慮問題的源頭,這恰恰是一種不正確的思維方式锹引,解決問題只能是 當(dāng)下的事情矗钟,但是長遠(yuǎn)的看,了解了問題的源頭才是關(guān)鍵嫌变,比如python是不是一門好的語言?你就可以解釋了躬它,雖然帶有片面性腾啥,但是根據(jù)你的實(shí)際情況,你就能說他是不是一門好的語言。