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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

vs2015编译linux源码,使用Visual Studio 2017(VS2017)编译OpenCC 1.0.4 (Open Chinese Convert)源代码...

發布時間:2023/11/27 生活经验 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)源代码...的全部內容,希望文章能夠幫你解決所遇到的問題。

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