vs2015编译linux源码,使用Visual Studio 2017(VS2017)编译OpenCC 1.0.4 (Open Chinese Convert)源代码...
摘要:本文介紹了Win7 64位環境下OpenCC(Open Chinese Convert) 1.0.4源碼編譯全過程,除VS2017外,VS2013以上版本也應該基本同樣適用,其他版本的Windows操作系統也應該適用。本文除了完成基本的編譯過程外,還指出并解決了目前在開放網絡上有關OpenCC 1.0.4在Windows環境編譯的過程中沒有被解決過的兩個問題(在Github和搜索引擎上均沒有答案)。
一、VS的版本關系
VC10,對應VS2010
VC11,對應VS2012
VC12,對應VS2013(OpenCC要求VS2013以上版本)
VC14,對應VS2015
VC15,對應VS2017(CMAKE直接生成的此版本解決方案在編譯時存在未解決的BUG,后詳)
二、為什么要從源碼編譯
1、OpenCC默認沒有發布Windows平臺下的二進制文件;
2、需要進行源碼級別的修改;
三、OpenCC介紹
OpenCC (Open Chinese Convert,開放中文轉換) 是一個用于中文簡繁轉換的開源項目,支持詞匯級別的轉換、異體字轉換和地區習慣用詞轉換(中國大陸、臺灣、香港),其官網位于Github中:https://github.com/BYVoid/OpenCC。
OpenCC嚴格區分「一簡對多繁」和「一簡對多異」,完全兼容異體字,支持中國大陸、臺灣、香港異體字和地區習慣用詞轉換,詞庫和函數庫完全分離,支持C、C++、Python、PHP、Java、Ruby、Node.js和Android,兼容Windows、Linux、Mac平臺。
在Github的Wiki中,有對OpenCC的詳細介紹和與cconv的對比,對于現代漢語常用簡繁一對多字義、地名等也進行了支持,從介紹上看應該是一個較優秀的解決方案。
四、在Windows平臺下使用CMAKE和Visual Studio編譯OpenCC
OpenCC是使用C++編寫的,編譯是需要用到CMAKE和Windows Visual Studio(2013或更高版本),有關CMAKE的安裝可以參見本站的文章《Win7 64位環境下OpenCV 3.3.0源碼編譯及VS2010(VS10)下開發》中的相關內容,在此不再贅述,本文使用的CMAKE 3.9.2和Visual Studio版本分別是:
編譯OpenCC 1.0.4使用的CAMKE版本
和
編譯OpenCC 1.0.4使用的VisualStudio版本
CMAKE安裝安裝好后,使用如下的命令生成VisualStudio解決方案文件并進行編譯(32位):
cmake -H. -Bbuild -G“Visual Studio 15” -DCMAKE_INSTALL_PREFIX=”path/to/install”
cmake –build build –config Release –target install
請注意,需要根據本地安裝的具體Visual Studio版本選擇合理的”Visual Studio *”,其中:
VC10,對應VS2010
VC11,對應VS2012
VC12,對應VS2013
VC14,對應VS2015
VC15,對應VS2017(請注意,直接使用”Visual Studio 15″生成的解決方案編譯不了,懷疑是VS的BUG,詳見問題②)。如果選擇了不恰當的版本會報找不到相應版本的工具鏈,可以通過Visual Studio Installer進行安裝(后詳)。
請注意,在某些機器上,上述命令如果直接從CMD中直接運行,可能會報如下的錯誤:
直接使用CMD運行CMAKE時的報錯
Failed to run MSBuild command:
MSBuild.exe
to get the value of VCTargetsPath:
Configuring incomplete, errors occurred!
此時,需要從Visual Studio Developer’s console(開發人員命令提示符):
使用VS開發人員命令提示符編譯OpenCC
中運行上述命令:
在VS開發人員命令提示符中編譯OpenCC1.0.4
編譯完成后,生成的VS工程文件等會被輸出到builid目錄中:
在VS開發人員命令提示符中編譯OpenCC1.0.4結果
然后打開builid目錄中的.sln解決方案文件即可:
CMAKE生成OpenCC1.0.4的VisualStudio解決方案文件
在VS中打開解決方案后,默認的啟動項目是ALL_BUILD,直接在菜單中點擊“生成-重新生成解決方案”重新生成解決方案即可。請注意,OpenCC?1.0.4版本CMAKE生成的VS2017(Visual Studio 15)解決方案文件在直接編譯時會有兩類錯誤:
①PhraseExtract.cpp文件編碼問題
opencc_phrase_extract項目和libopencc項目無法編譯,這兩個項目中的PhraseExtract.cpp文件(路徑分別位于src/PhraseExtract.cpp和src/tools/PhraseExtract.cpp)由于編碼問題會報錯:
警告 C4819 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存為 Unicode 格式以防止數據丟失
錯誤 C3688 文本后綴“銆”無效;未找到文文本運算符或文本運算符模板“operator “”””銆”
錯誤 C3688 文本后綴“錛”無效;未找到文文本運算符或文本運算符模板“operator “”””錛”
錯誤 C3688 文本后綴“鈥”無效;未找到文文本運算符或文本運算符模板“operator “”””鈥”
錯誤 C2001 常量中有換行符
如下圖所示:
默認生成的VS2017解決方案編譯時報錯
此時,可以通過“文件-高級保存選項”將PhraseExtract.cpp文件的編碼從默認的“簡體中文(GB2312-代碼頁936)”和“Uncode(UTF-8無簽名)-代碼頁65001”修改為“Unicode-代碼頁1200”解決(如果找不到“高級保存選項”請參見《解決Visual Studio 2017(VS2017)中找不到/沒有“高級保存選項”的問題》):
修改OpenCC 1.0.4中PhraseExtract.cpp文件的編碼以解決編譯錯誤
在網上,有一篇在搜索引擎中排名非常靠前的文章《使用OPENCC庫進行簡繁轉換(C++代碼)》中提到:
此處1.0.4版本中項目:opencc_phrase_extract 是無法編譯的,在GIT上也有對應的issue,刪除該項目即可,不影響使用,所以不用管他。
如下圖所示:
處理PhraseExtract.cpp文件編碼問題導致編譯失敗的錯誤方式
這實際上是一種錯誤的鴕鳥做法,事實上完全可以通過本文所述修改文件編碼的方式解決該問題。在本文的最后,我們也可以看到在tools文件夾中生成了opencc_phrase_extract.exe.exe。
②setjmp莫名其妙的詭異BUG
除了編碼問題外,還有幾個關于longjmp和setjmp的詭異BUG,這兩個函數用于在C語言中進行異常處理:
錯誤 C3829 標準屬性 “noreturn” 只可適用于函數 libopencc d:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.12.25827\include\setjmp.h 165
錯誤 C2206 “longjmp”: typedef 不能用于函數定義 libopencc d:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.12.25827\include\setjmp.h 165
錯誤 C2039 “longjmp”: 不是“`global namespace’”的成員 libopencc d:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.12.25827\include\csetjmp 10
錯誤 C2873 “longjmp”: 符號不能用在 using 聲明中 libopencc d:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.12.25827\include\csetjmp 10
如下圖所示:
使用VS2017編譯OpenCC1.0.4源碼時的詭異錯誤
上述幾個報錯的位置位于形如:
d:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.12.25827\include\setjmp.h(165)
的頭文件中,該頭文件是VS自帶的頭文件。有關上述四個報錯在所有的搜索引擎中均搜不到答案,我將該問題提到了OpenCC所在GitHub的Issue#287中,看后續是否有人解決。
直覺上,感覺可能是由于VS2017的問題,因此嘗試使用了”Visual Studio 14″降級到VS2015編譯,結果成功:
cmake -H. -Bbuild -G”Visual Studio 14” -DCMAKE_INSTALL_PREFIX=”path/to/install”
cmake –build build –config Release –target install
請注意,要使用”Visual Studio 14″必須安裝V140工具集,否則會報錯,這可以通過Visual Studio Installer進行:
使用Visual Studio Installer安裝v140工具集
在“修改-單個組件”中選擇“用于桌面的VC++ 2015.3 v140工具集(x86,x64)”:
使用Visual Studio Installer安裝v140工具集
安裝完成后,再次嘗試編譯,成功:
使用”Visual Studio 14″降級到VS2015編譯OpenCC1.0.4成功
在VS2017中打開opencc.sln的解決方案,可以觀察到項目屬性的“目標平臺版本”為8.1,而VS2017默認的為10.0.x,這可能是此前使用VC15編譯失敗的原因之一:
VS2015解決方案文件中項目屬性的的“目標平臺版本”
編譯完成后生成的二進制文件位于./build/src/Release目錄中,共有三個:
OpenCC1.0.4編譯后輸出的二進制文件
其中,opencc.dll為動態鏈接庫,opencc.lib為靜態鏈接庫。
此外,在./builid/src/tools/Release目錄下還有編譯生成的相關工具:
OpenCC1.0.4編譯后輸出的二進制文件(工具)
我們可以看到,在tools文件夾中生成了opencc_phrase_extract.exe文件,無需使用鴕鳥策略。
直接運行OpenCC,可以得到正常的輸出(由于直接是從GitHub master上拉取的最新代碼所以版本號已經到了1.0.5):
運行編譯出的OpenCC
五、編譯64位(x64)的OpenCC
如果要編譯64位版本,可以使用如下的命令生成VisualStudio解決方案:
cmake -H. -Bbuild -G“Visual Studio 14 Win64″ -DCMAKE_INSTALL_PREFIX=”path/to/install”
cmake –build build –config Release –target install
總結
以上是生活随笔為你收集整理的vs2015编译linux源码,使用Visual Studio 2017(VS2017)编译OpenCC 1.0.4 (Open Chinese Convert)源代码...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求助万能的八卦,求一首曲子的名字,琵琶演
- 下一篇: 各位大神,帮我鉴定一下,这狗是不是纯种罗