最近要移植乙個linux的程式到windows,其中字元編碼各種坑先不去說,在linux執行得好好的botan庫在windows下死活不行,按說我們只用了這個庫的乙個小功能,移植應該不存在大問題,折騰了兩天,才發現是編譯的庫不支援debug造成的,改用release問題馬上就解決了。
程式用到了botan的 cryptobox::decrypt 函式用來解密原先加密的字串,linux下正常工作,在visual studio 2017裡,一執行就拋異常,而且這個異常顯得神秘而又詭異:
vectortoo long應該是在庫內部執行之時出的錯誤,當時懷疑是不是字元編碼的問題,因為這之前剛好改了好幾個地方都是編碼問題,難道這個錯誤也是因為字元位元組數不一致導致長度計算問題?按這個方向越走越遠,查了botan庫的原始碼,不得要領。
後來又想到是不是因為平台不同,原先linux下加密的密文和windows下不一致導致了解密過程的錯誤。於是,乾脆做乙個windows下的加密工具,本來這個加密是可以在linux下做的沒有計畫要移植。
這一做,發現加密的過程也出現了神秘的異常,呼叫 cryptobox::encrypt 函式的異常:
pbkdf2 cannot accept passphrase of the given size什麼?因為給定的長度不接受密碼短語,難道還是編碼問題? 結果剛剛回頭的人又被導向編碼問題的方向……
後來差點要相信玄學去了的時候,想到botan-test.exe能夠正常執行,說明botan是能夠支援編碼的,而且tests的原始碼也並沒有什麼特殊之處,按理直接移植過來就ok了的。就乾脆把tests專案匯入到vs2017,結果讓人捉摸不透的異常依舊存在。
後來實在是不願意相信玄學,就到處看看其它和botan相關的問題,看看別人都踩過什麼坑,無意中看到這篇文章,我引用一下:
該問題導致的原因已經找到,跟蹤進入botan 編譯配置指令碼發現有樓主 pullus_1st 的一番話立即引起了注意。原來如此!build_group.add_option('--enable-debug', dest='debug_build',
action='store_true', default=false,
help='enable debug build')
而問題導致的原因就是我在進行編譯配置的時候沒有指定--enable-debug,而預設的配置是--disable-debug,編譯出來的庫是release版本,而我進行測試的時候工程一直是debug版本導致出現了問題,希望能給遇到同樣問題的同學提供一點幫助。
馬上把移植的專案切換到release編譯,ok!
參考 《在windows下編譯botan》
把2. 安裝python,如果沒有的話,然後執行configure.py中的命令加上 --debug-mode 選項就好了:
python configure.py --cc=msvc --os=windows --cpu=x86_32 --debug-mode從這裡看起來連owner都不太清楚這個選項有什麼用了
windows下使用virtualenv建立環境
原文 使用場景 斯坦福cs231n 2017公開課作業一需要建立的環境 cs231n作業教程中寫法 cd assignment1sudo pip install virtualenv 這個可能已經安裝virtualenv p python3 env 建立乙個名為.env的虛擬環境 python3 注...
CVS使用 windows環境下
經驗 1,wincvs中執行checkout動作的單位是 module 即匯入cvs倉庫的專案名稱。import時有設定,要記好。2,cvsroot pserver username password localhost 倉庫名 3,初始化乙個cvs倉庫,並將乙個現有專案匯入到cvs中 1 通過cv...
在Windows下使用GCC
如何安裝 mingw gcc 編譯器套件 1 使用圖形化的自動安裝程式 2 使用命令列工具 mingw get 3 手動安裝 binutils mingw runtime dev and dll w32api mpc dev and dll mpfr dev and dll gmp dev and ...